<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>Linux基础知识 | 无人深空</title><meta name="keywords" content="Linux"><meta name="author" content="zcm"><meta name="copyright" content="zcm"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="Linux 基础知识1.Linux 开山篇-内容介绍 课程大纲   Linux 主要应用   个人桌面领域的应用  此领域是传统 linux 应用薄弱的环节，近些年来随着 ubuntu、fedora 等优秀桌面环境的兴起，linux 在个人桌面领域的占有率在逐渐的提高   服务器领域  linux 在服务器领域的应用是最强的 linux 免费、稳定、高效等特点在这里得到了很好的体现，尤其在一些高端">
<meta property="og:type" content="article">
<meta property="og:title" content="Linux基础知识">
<meta property="og:url" content="https://gitee.com/zcmmmm/zcmmmm/2022/11/13/Linux%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/index.html">
<meta property="og:site_name" content="无人深空">
<meta property="og:description" content="Linux 基础知识1.Linux 开山篇-内容介绍 课程大纲   Linux 主要应用   个人桌面领域的应用  此领域是传统 linux 应用薄弱的环节，近些年来随着 ubuntu、fedora 等优秀桌面环境的兴起，linux 在个人桌面领域的占有率在逐渐的提高   服务器领域  linux 在服务器领域的应用是最强的 linux 免费、稳定、高效等特点在这里得到了很好的体现，尤其在一些高端">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux.png">
<meta property="article:published_time" content="2022-11-13T00:26:27.000Z">
<meta property="article:modified_time" content="2022-11-14T08:31:24.447Z">
<meta property="article:author" content="zcm">
<meta property="article:tag" content="Linux">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux.png"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="https://gitee.com/zcmmmm/zcmmmm/2022/11/13/Linux%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = { 
  root: '/',
  algolia: undefined,
  localSearch: {"path":"/search.xml","preload":false,"languages":{"hits_empty":"找不到您查询的内容：${query}"}},
  translate: undefined,
  noticeOutdate: undefined,
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":200},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '天',
  date_suffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: undefined,
  lightbox: 'fancybox',
  Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#1f1f1f","position":"bottom-left"},
  source: {
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
    }
  },
  isPhotoFigcaption: false,
  islazyload: false,
  isAnchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: 'Linux基础知识',
  isPost: true,
  isHome: false,
  isHighlightShrink: false,
  isToc: true,
  postUpdate: '2022-11-14 16:31:24'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          if (t === 'dark') activateDarkMode()
          else if (t === 'light') activateLightMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    
    const detectApple = () => {
      if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
    })(window)</script><link rel="stylesheet" href="/css/categories.css?v1"><link rel="stylesheet" href="/css/navigation.css?v1"><link rel="stylesheet" href="/css/custom.css?v1"><meta name="generator" content="Hexo 6.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="https://s2.loli.net/2022/09/22/36LN4kcjYOd9HT8.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">43</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">25</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">11</div></a></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div></div></div></div><div class="post" id="body-wrap"><header class="not-top-img" id="page-header"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">无人深空</a></span><div id="menus"></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div></div><div id="nav-right"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i></a></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav></header><main class="layout" id="content-inner"><div id="post"><div id="post-info"><h1 class="post-title">Linux基础知识</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">发表于</span><time class="post-meta-date-created" datetime="2022-11-13T00:26:27.000Z" title="发表于 2022-11-13 08:26:27">2022-11-13</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2022-11-14T08:31:24.447Z" title="更新于 2022-11-14 16:31:24">2022-11-14</time></span><span class="post-meta-categories"><span class="post-meta-separator">|</span><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/Others/">Others</a></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-wordcount"><i class="far fa-file-word fa-fw post-meta-icon"></i><span class="post-meta-label">字数总计:</span><span class="word-count">15.3k</span><span class="post-meta-separator">|</span><i class="far fa-clock fa-fw post-meta-icon"></i><span class="post-meta-label">阅读时长:</span><span>52分钟</span></span><span class="post-meta-separator">|</span><span class="post-meta-pv-cv" id="" data-flag-title="Linux基础知识"><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">阅读量:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span></div></div></div><article class="post-content" id="article-container"><h2 id="Linux-基础知识"><a href="#Linux-基础知识" class="headerlink" title="Linux 基础知识"></a>Linux 基础知识</h2><h3 id="1-Linux-开山篇-内容介绍"><a href="#1-Linux-开山篇-内容介绍" class="headerlink" title="1.Linux 开山篇-内容介绍"></a>1.Linux 开山篇-内容介绍</h3><ol>
<li><p>课程大纲</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/%E8%AF%BE%E7%A8%8B%E5%A4%A7%E7%BA%B2.png" alt="课程大纲"></p>
</li>
<li><p>Linux 主要应用</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux%E4%BD%BF%E7%94%A8%E5%9C%A8%E5%93%AA%E4%BA%9B%E5%9C%B0%E6%96%B9.png" alt="Linux使用在哪些地方"></p>
<ul>
<li><p>个人桌面领域的应用</p>
<blockquote>
<p>此领域是传统 linux 应用薄弱的环节，近些年来随着 ubuntu、fedora 等优秀桌面环境的兴起，linux 在个人桌面领域的占有率在逐渐的提高</p>
</blockquote>
</li>
<li><p>服务器领域</p>
<blockquote>
<p>linux 在服务器领域的应用是最强的</p>
<p>linux 免费、稳定、高效等特点在这里得到了很好的体现，尤其在一些高端领域尤为广泛（c&#x2F;c++&#x2F;php&#x2F;java&#x2F;python&#x2F;go）</p>
</blockquote>
</li>
<li><p>嵌入式领域</p>
<blockquote>
<p>linux 运行稳定、对网络的良好支持性、低成本，且可以根据需要进行软件裁剪，内核最小可以达到几百 KB 等特点</p>
<p>使其近些年来在嵌入式领域的应用得到非常大的提高</p>
<p>主要应用：机顶盒、数字电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域。以后在物联网中应用会更加广泛</p>
</blockquote>
</li>
</ul>
</li>
</ol>
<h3 id="2-Linux-基础篇-Linux-入门"><a href="#2-Linux-基础篇-Linux-入门" class="headerlink" title="2.Linux 基础篇-Linux 入门"></a>2.Linux 基础篇-Linux 入门</h3><ol>
<li><p>概述</p>
<blockquote>
<p>linux 是一个开源、免费的操作系统，其稳定性、安全性、处理多并发已经得到业界的认可，目前很多企业级的项目 (c&#x2F;c++&#x2F;php&#x2F;python&#x2F;java&#x2F;go) 都会部署到 Linux&#x2F;unix 系统上</p>
</blockquote>
<ul>
<li><p>xLinux 之父</p>
<blockquote>
<p>Linus Torvalds</p>
<p>Git 创作者</p>
<p>世界著名黑客</p>
<p>linux0.01 版源码(不到1w 行)</p>
</blockquote>
</li>
<li><p>Linux 主要的发行版</p>
<blockquote>
<p>Ubuntu(乌班图)、RedHat(红帽)、CentOS、Debain[蝶变]、Fedora、SuSE、OpenSUSE</p>
</blockquote>
</li>
</ul>
</li>
<li><p>Linux 和 Unix 的关系</p>
<ul>
<li><p>unix 来源</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/unix%E6%9D%A5%E6%BA%90.png" alt="unix来源"></p>
</li>
<li><p>Linux 来源</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux%E6%9D%A5%E6%BA%90.png" alt="Linux来源"></p>
</li>
<li><p>两者关系</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux%E3%80%81Unix%E4%B8%A4%E8%80%85%E5%85%B3%E7%B3%BB.png" alt="Linux、Unix两者关系"></p>
</li>
</ul>
</li>
</ol>
<h3 id="3-Linux-基础篇-VM-和-Linux-安装（略）"><a href="#3-Linux-基础篇-VM-和-Linux-安装（略）" class="headerlink" title="3.Linux 基础篇-VM 和 Linux 安装（略）"></a>3.Linux 基础篇-VM 和 Linux 安装（略）</h3><h3 id="4-Linux-基础篇-目录结构"><a href="#4-Linux-基础篇-目录结构" class="headerlink" title="4.Linux 基础篇-目录结构"></a>4.Linux 基础篇-目录结构</h3><ol>
<li><p>基本介绍</p>
<ul>
<li>linux 的文件系统是采用级层式的树状目录结构，在此结构中的最上层是根目录 <code>/</code>，然后在此目录下再创建其他的目录</li>
<li>深刻理解 linux 树状文件目录是非常重要的：<strong>在 Linux 世界里，一切皆文件</strong></li>
</ul>
</li>
<li><p>具体目录结构</p>
<ul>
<li><p><code>/bin</code> [常用] (<code>/usr/bin</code> 、<code>/usr/local/bin</code>)</p>
<blockquote>
<p>是 Binary 的缩写，这个目录存放着最经常使用的命令</p>
</blockquote>
</li>
<li><p><code>/sbin</code> (<code>/usr/sbin</code> 、<code>/usr/local/sbin</code>)</p>
<blockquote>
<p><code>s</code> 就是 <code>Super User</code> 的意思，这里存放的是系统管理员使用的系统管理程序</p>
</blockquote>
</li>
<li><p><code>/home</code> [常用]</p>
<blockquote>
<p>存放普通用户的主目录，在 Linux 中每个用户都有一个自己的目录</p>
<p>一般该目录名是以用户的账号命名</p>
</blockquote>
</li>
<li><p><code>/root</code> [常用]</p>
<blockquote>
<p>该目录为系统管理员，也称作超级权限者的用户主目录</p>
</blockquote>
</li>
<li><p><code>/lib</code></p>
<blockquote>
<p>系统开机所需要最基本的动态连接共享库，其作用类似于 Windows 里的 DLL 文件</p>
<p>几乎所有的应用程序都需要用到这些共享库</p>
</blockquote>
</li>
<li><p><code>/lost+found</code> </p>
<blockquote>
<p>图形化界面不可见，用命令行 <code>ls /</code> 可见</p>
<p>这个目录一般情况下是空的，当系统非法关机后，这里就存放了一些文件</p>
</blockquote>
</li>
<li><p><code>/etc</code> [常用]</p>
<blockquote>
<p>所有的系统管理所需要的配置文件和子目录，比如安装 mysql 数据库 <code>my.conf</code></p>
</blockquote>
</li>
<li><p><code>/usr</code> [常用]</p>
<blockquote>
<p>这是一个非常重要的目录，用户的很多应用程序和文件都放在这个目录下，类似与 windows 下的 <code>program files</code> 目录</p>
</blockquote>
</li>
<li><p><code>/boot</code> [常用] </p>
<blockquote>
<p>存放的是启动 Linux 时使用的一些核心文件，包括一些连接文件以及镜像文件</p>
</blockquote>
</li>
<li><p><code>/proc</code> [不能动]</p>
<blockquote>
<p>这个目录是一个虚拟的目录，它是系统内存的映射，访问这个目录来获取系统信息</p>
</blockquote>
</li>
<li><p><code>/srv</code> [不能动]</p>
<blockquote>
<p>service 缩写，该目录存放一些服务启动之后需要提取的数据</p>
</blockquote>
</li>
<li><p><code>/sys</code> [不能动]</p>
<blockquote>
<p>这是linux2.6 内核的一个很大的变化</p>
<p>该目录下安装了2.6 内核中新出现的一个文件系统 <code>sysfs</code> &#x3D;》【别动】</p>
</blockquote>
</li>
<li><p><code>/tmp</code> </p>
<blockquote>
<p>这个目录是用来存放一些临时文件的</p>
</blockquote>
</li>
<li><p><code>/dev</code></p>
<blockquote>
<p>类似于 windows 的设备管理器，把所有的硬件用文件的形式存储</p>
</blockquote>
</li>
<li><p><code>/media</code> [常用]</p>
<blockquote>
<p>linux 系统会自动识别一些设备，例如U 盘、光驱等等，当识别后，linux 会把识别的设备挂载到这个目录下</p>
</blockquote>
</li>
<li><p><code>/mnt</code> [常用]</p>
<blockquote>
<p>系统提供该目录是为了让用户临时挂载别的文件系统的，我们可以将外部的存储挂载在 <code>/mnt/</code>上，然后进入该目录就可以查看里的内容了</p>
</blockquote>
</li>
<li><p><code>/opt</code> （安装包存放目录）</p>
<blockquote>
<p>这是给主机额外安装软件所存放的目录</p>
<p>如安装 ORACLE 数据库就可放到该目录下</p>
<p>默认为空</p>
</blockquote>
</li>
<li><p><code>/usr/local</code> [常用]（安装包解压后软件存放目录）</p>
<blockquote>
<p>这是另一个给主机额外安装软件所安装的目录</p>
<p>一般是通过编译源码方式安装的程序</p>
</blockquote>
</li>
<li><p><code>/var</code> [常用]</p>
<blockquote>
<p>这个目录中存放着在不断扩充着的东西，习惯将经常被修改的目录放在这个目录下</p>
<p>包括各种日志文件</p>
</blockquote>
</li>
<li><p><code>/selinux</code> [security-enhanced linux]</p>
<blockquote>
<p><code>SELinux</code> 是一种安全子系统,它能控制程序只能访问特定文件，有三种工作模式，可以自行设置</p>
</blockquote>
</li>
</ul>
</li>
</ol>
<h3 id="5-Linux-实操篇-远程登录到Linux-服务器（略）"><a href="#5-Linux-实操篇-远程登录到Linux-服务器（略）" class="headerlink" title="5.Linux 实操篇-远程登录到Linux 服务器（略）"></a>5.Linux 实操篇-远程登录到Linux 服务器（略）</h3><blockquote>
<p>Xshell 连接</p>
</blockquote>
<h3 id="6-Linux-实操篇-Vi-和Vim-编辑器"><a href="#6-Linux-实操篇-Vi-和Vim-编辑器" class="headerlink" title="6.Linux 实操篇-Vi 和Vim 编辑器"></a>6.Linux 实操篇-Vi 和Vim 编辑器</h3><ol>
<li><p>vi 和 vim 的基本介绍</p>
<ul>
<li>Linux 系统会内置 vi 文本编辑器</li>
<li>Vim 具有程序编辑的能力，可以看做是 Vi 的增强版本，可以主动的以字体颜色辨别语法的正确性，方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富，在程序员中被广泛使用</li>
</ul>
</li>
<li><p>vi 和 vim 常用的三种模式</p>
<ul>
<li><p>正常模式</p>
<blockquote>
<p>以 vim 打开一个档案就直接进入一般模式了（这是默认的模式）</p>
<p>在这个模式中， 可以使用『上下左右』按键来移动光标，可以使用『删除字符』或『删除整行』来处理档案内容， 也可以使用『复制、粘贴』来处理你的文件数据</p>
</blockquote>
</li>
<li><p>插入模式</p>
<blockquote>
<p>按下 <code>i, I, o, O, a, A, r, R</code> 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可</p>
</blockquote>
</li>
<li><p>命令行模式</p>
<blockquote>
<p>输入 <code>esc</code> 再输入<code>：</code>在这个模式当中， 可以提供相关指令，完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的</p>
</blockquote>
</li>
</ul>
</li>
<li><p>vi 和 vim 基本使用</p>
<ul>
<li><p>三种模式切换</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/vim%E6%A8%A1%E5%BC%8F%E5%88%87%E6%8D%A2.png" alt="vim模式切换"></p>
</li>
<li><p>快捷键</p>
<ul>
<li>拷贝当前行 <code>yy</code> ，拷贝当前行及其下面的 5 行 <code>5yy</code>，并粘贴（输入 p）</li>
<li>删除当前行 <code>dd</code> ，删除当前行及其下面的 5 行 <code>5dd</code></li>
<li>在文件中查找某个单词[命令行下<code>/</code>关键字， 回车查找，输入 n 就是查找下一个]</li>
<li>设置文件的行号，取消文件的行号 [命令行下<code>:set nu</code> 和<code>:set nonu</code>]</li>
<li>编辑 <code>/etc/profile</code> 文件，在一般模式下, 使用快捷键到该文档的最末行[<code>G</code>]和最首行[<code>gg</code>]</li>
<li>在一个文件中输入”hello” ，在一般模式下, 然后又撤销这个动作<code>u</code></li>
<li>编辑 <code>/etc/profile</code> 文件，在一般模式下，输入 20，再输入 <code>shift+g</code>，即可定位到第 20 行</li>
</ul>
</li>
<li><p>快捷键的键盘对应图</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/vim%E9%94%AE%E7%9B%98%E5%9B%BE.png" alt="vim键盘图"></p>
</li>
</ul>
</li>
</ol>
<h3 id="7-Linux-实操篇-开机、重启和用户登录注销"><a href="#7-Linux-实操篇-开机、重启和用户登录注销" class="headerlink" title="7.Linux 实操篇-开机、重启和用户登录注销"></a>7.Linux 实操篇-开机、重启和用户登录注销</h3><ol>
<li><p>关机 &amp; 重启命令</p>
<ul>
<li><code>shutdown –h now</code> 立该进行关机</li>
<li><code>shudown -h 1</code> “hello, 1 分钟后会关机了”</li>
<li><code>shutdown –r now</code> 现在重新启动计算机</li>
<li><code>halt</code> 关机，作用和 <code>shutdown –h now</code> 一样</li>
<li><code>reboot</code> 现在重新启动计算机</li>
<li><code>sync</code> 把内存的数据同步到磁盘</li>
</ul>
<blockquote>
<p>不管是重启系统还是关闭系统，首先要运行 sync 命令，把内存中的数据写到磁盘中</p>
<p>目前的 <code>shutdown/reboot/halt</code> 等命令均已经在关机前进行了 <code>sync</code>（无需再手动输入）</p>
</blockquote>
</li>
<li><p>用户登录和注销</p>
<ul>
<li>登录时尽量少用 root 帐号登录，因为它是系统管理员，最大的权限，避免操作失误。可以利用普通用户登录，登录后再用 <code>su - 用户名</code> 命令来切换成系统管理员身份</li>
<li>在提示符下输入 logout 即可注销用户（logout 注销指令在图形运行级别无效，在运行级别3 下有效）</li>
</ul>
</li>
</ol>
<h3 id="8-Linux-实操篇-用户管理"><a href="#8-Linux-实操篇-用户管理" class="headerlink" title="8.Linux 实操篇-用户管理"></a>8.Linux 实操篇-用户管理</h3><ol>
<li><p>基本介绍</p>
<blockquote>
<p>Linux 系统是一个多用户多任务的操作系统，任何一个要使用系统资源的用户，都必须首先向系统管理员申请一个账号，然后以这个账号的身份进入系统</p>
</blockquote>
</li>
<li><p>基本操作</p>
<ul>
<li><p><code>useradd username</code>：添加用户</p>
<blockquote>
<p>当创建用户成功后，会自动的创建和用户同名的家目录 <code>/home/username/</code></p>
<p>也可以通过 <code>useradd -d</code> 指定目录新的用户名，给新创建的用户指定家目录</p>
</blockquote>
</li>
<li><p><code>passwd username</code>：指定&#x2F;修改密码</p>
</li>
<li><p><code>userdel username</code>：删除用户</p>
<blockquote>
<p>删除用户<code>milan</code>，但是要保留家目录：<code>userdel milan</code></p>
<p>删除用户<code>tom</code>以及用户主目录：<code>userdel -r tom</code></p>
<p>一般情况下，建议保留家目录</p>
</blockquote>
</li>
<li><p><code>id username</code>：查询用户信息</p>
<blockquote>
<p>当用户不存在时，返回无此用户</p>
</blockquote>
</li>
<li><p><code>su username</code>：切换到指定用户</p>
<blockquote>
<p>从权限高的用户切换到权限低的用户，不需要输入密码，反之需要</p>
<p>当需要返回到原来用户时，使用 <code>exit/logout</code> 指令</p>
</blockquote>
</li>
<li><p><code>whoami/ who am I</code> 查看当前用户</p>
</li>
</ul>
</li>
<li><p>用户组</p>
<blockquote>
<p>类似于角色，系统可以对有共性&#x2F;权限的多个用户进行统一的管理</p>
</blockquote>
<ul>
<li><code>groupadd groupname</code>：新增组</li>
<li><code>groupdel groupname</code>：删除组</li>
<li><code>useradd -g groupname username</code>：添加用户时指定组</li>
<li><code>usermod -g groupname username</code>：修改用户所属的组</li>
</ul>
</li>
<li><p>用户和组相关文件</p>
<ul>
<li><p><code>/etc/passwd</code> 文件</p>
<blockquote>
<p>用户（user）的配置文件，记录用户的各种信息</p>
<p>每行的含义：用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell</p>
</blockquote>
</li>
<li><p><code>/etc/shadow</code> 文件</p>
<blockquote>
<p>口令的配置文件</p>
<p>每行的含义：登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志</p>
</blockquote>
</li>
<li><p><code>/etc/group</code> 文件</p>
<blockquote>
<p>组（group）的配置文件，记录 Linux 包含的组的信息</p>
<p>每行含义：组名:口令:组标识号:组内用户列表</p>
</blockquote>
</li>
</ul>
</li>
</ol>
<h3 id="9-Linux-实操篇-实用指令"><a href="#9-Linux-实操篇-实用指令" class="headerlink" title="9.Linux 实操篇-实用指令"></a>9.Linux 实操篇-实用指令</h3><ol>
<li><p>指定运行级别</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>常用运行级别是 3 和 5 ，也可以指定默认运行级别</p>
</blockquote>
<ul>
<li>0 ：关机</li>
<li>1 ：单用户【找回丢失密码】</li>
<li>2：多用户状态没有网络服务</li>
<li>3：多用户状态有网络服务</li>
<li>4：系统未使用保留给用户</li>
<li>5：图形界面</li>
<li>6：系统重启</li>
</ul>
</li>
<li><p>应用实例</p>
<ul>
<li>命令 <code>init [0123456]</code></li>
<li>通过 <code>init 等级编号</code> 来切换不同的运行级别</li>
</ul>
</li>
<li><p>CentOS7 后运行级别说明（之前版本配置信息写在 <code>/etc/inittab</code> 文件中）</p>
<blockquote>
<p><code>multi-user.target</code>: analogous to runlevel 3<br><code>graphical.target</code>: analogous to runlevel 5</p>
<p>查看当前运行级别：<code>systemctl get-default</code></p>
<p>设置默认运行级别：<code>systemctl set-default TARGET.target</code></p>
</blockquote>
</li>
</ul>
</li>
<li><p><a target="_blank" rel="noopener" href="https://www.cnblogs.com/oldboy666/p/15425920.html">找回 root 密码（CentOS 7 版本）</a></p>
</li>
<li><p>帮助指令</p>
<ul>
<li>man [命令或配置文件]（功能描述：获得帮助信息）：<code>man ls</code></li>
<li>help 命令（功能描述：获得 shell 内置命令的帮助信息）：<code>help</code></li>
</ul>
</li>
<li><p>文件目录类</p>
<ul>
<li><p>pwd (功能描述：显示当前工作目录的绝对路径)</p>
</li>
<li><p>ls [选项] [目录或是文件]</p>
<blockquote>
<p>-a ：显示当前目录所有的文件和目录，包括隐藏的<br>-l ：以列表的方式显示信息</p>
</blockquote>
</li>
<li><p>cd [参数] (功能描述：切换到指定目录)</p>
<blockquote>
<p><code>cd ~</code> 或者 <code>cd :</code>回到自己的家目录（比如你是root ， cd ~ 到&#x2F;root）<br><code>cd ..</code> 回到当前目录的上一级目录</p>
</blockquote>
</li>
<li><p>mkdir [选项] 要创建的目录</p>
<blockquote>
<p>-p ：创建多级目录</p>
<p>如 <code>mkdir -p /home/animal/tiger</code></p>
</blockquote>
</li>
<li><p>rmdir [选项] 要删除的空目录</p>
<blockquote>
<p>rmdir 删除的是空目录，如果目录下有内容时无法删除的</p>
<p>提示：如果需要删除非空目录，需要使用 <code>rm -rf</code> 要删除的目录</p>
<p>比如： <code>rm -rf /home/animal</code></p>
</blockquote>
</li>
<li><p>touch 文件名称 (功能描述：创建空文件) </p>
</li>
<li><p>cp [选项] source dest (功能描述：指令拷贝文件到指定目录)</p>
<blockquote>
<p>-r ：递归复制整个文件夹</p>
<p>比如将 <code>/home/bbb</code> 整个目录， 拷贝到<code>/opt</code>：<code>cp -r /home/bbb /opt</code></p>
<p>强制覆盖不提示<code>\cp</code>： <code>\cp -r /home/bbb /opt</code></p>
</blockquote>
</li>
<li><p>rm [选项] 要删除的文件或目录</p>
<blockquote>
<p>-r ：递归删除整个文件夹<br>-f ： 强制删除不提示</p>
</blockquote>
</li>
<li><p>mv 移动文件与目录或重命名</p>
<blockquote>
<p><code>mv oldNameFile newNameFile</code> (功能描述：重命名)<br><code>mv /temp/movefile /targetFolder</code> (功能描述：移动文件)</p>
</blockquote>
</li>
<li><p>cat [选项] 要查看的文件</p>
<blockquote>
<p>-n ：显示行号</p>
<p>cat 只能浏览文件，而不能修改文件，为了浏览方便，一般会带上管道命令| more<br>cat -n &#x2F;etc&#x2F;profile | more [进行交互]</p>
</blockquote>
</li>
<li><p>more 指令</p>
<blockquote>
<p>more 指令是一个基于 VI 编辑器的文本过滤器，它以全屏幕的方式按页显示文本文件的内容</p>
<p>more 指令中内置了若干快捷键(交互的指令)</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/more.png" alt="more"></p>
</blockquote>
</li>
<li><p>less 要查看的文件</p>
<blockquote>
<p>less 指令用来分屏查看文件内容，它的功能与 more 指令类似，但是比 more 指令更加强大，支持各种显示终端</p>
<p>less 指令在显示文件内容时，并不是一次将整个文件加载之后才显示，而是根据显示需要加载内容，对于显示大型文件具有较高的效率</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/less.png" alt="less"></p>
</blockquote>
</li>
<li><p>echo [选项] [输出内容]</p>
</li>
<li><p>head 指令</p>
<blockquote>
<p>head 用于显示文件的开头部分内容，默认情况下 head 指令显示文件的前 10 行内容</p>
<p>head 文件（功能描述：查看文件头10 行内容）</p>
<p>head -n 5 文件（功能描述：查看文件头 5 行内容，5 可以是任意行数）</p>
</blockquote>
</li>
<li><p>tail 指令</p>
<blockquote>
<p>tail 用于输出文件中尾部的内容，默认情况下 tail 指令显示文件的前 10 行内容</p>
<p>tail 文件（功能描述：查看文件尾 10 行内容）</p>
<p>tail -n 5 文件（功能描述：查看文件尾 5 行内容，5 可以是任意行数）</p>
<p>tail -f 文件（功能描述：实时追踪该文档的所有更新）</p>
</blockquote>
</li>
<li><p><code>&gt;</code> 指令和 <code>&gt;&gt;</code> 指令</p>
<blockquote>
<p><code>&gt;</code> 输出重定向和 <code>&gt;&gt;</code> 追加</p>
<p>ls -l &gt;文件（功能描述：列表的内容写入文件a.txt 中（覆盖写））</p>
<p>ls -al &gt;&gt;文件（功能描述：列表的内容追加到文件aa.txt 的末尾）</p>
<p>cat 文件1 &gt; 文件2 （功能描述：将文件1 的内容覆盖到文件2）</p>
<p>echo “内容”&gt;&gt; 文件(追加)</p>
</blockquote>
</li>
<li><p>ln -s [原文件或目录] [软链接名] （功能描述：给原文件创建一个软链接）</p>
<blockquote>
<p>软链接也称为符号链接，类似于 windows 里的快捷方式，主要存放了链接其他文件的路径</p>
</blockquote>
</li>
<li><p>history （功能描述：查看已经执行过历史命令）</p>
<blockquote>
<p>history（显示所有的历史命令）</p>
<p>history 10（显示最近使用过的10 个指令）</p>
<p><code>!5</code> （执行历史编号为 5 的指令）</p>
</blockquote>
</li>
</ul>
</li>
<li><p>时间日期类</p>
<ul>
<li><p>date 显示当前日期</p>
<ul>
<li>date （功能描述：显示当前时间）</li>
<li>date +%Y （功能描述：显示当前年份）</li>
<li>date +%m（功能描述：显示当前月份）</li>
<li>date +%d （功能描述：显示当前是哪一天）</li>
<li>date “+%Y-%m-%d %H:%M:%S”（功能描述：显示年月日时分秒）</li>
</ul>
</li>
<li><p>date 设置当前日期</p>
<blockquote>
<p>date -s 字符串时间，如 <code>date -s “2020-11-03 20:02:10”</code></p>
</blockquote>
</li>
<li><p>cal [选项] （功能描述：不加选项，显示本月日历）</p>
<blockquote>
<p>显示当前日历 cal</p>
<p>显示 2020 年日历: cal 2020</p>
</blockquote>
</li>
</ul>
</li>
<li><p>搜索查找类</p>
<ul>
<li><p>find [搜索范围] [选项]</p>
<blockquote>
<p>find 指令将从指定目录向下递归地遍历其各个子目录，将满足条件的文件或者目录显示在终端</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/find.png" alt="find"></p>
</blockquote>
<ul>
<li><p>按文件名：根据名称查找 <code>/home</code> 目录下的 <code>hello.txt</code> 文件</p>
<p><code>find /home -name hello.txt</code></p>
</li>
<li><p>按拥有者：查找 <code>/opt</code> 目录下，用户名称为 <code>nobody</code> 的文件</p>
<p><code>find /opt -user nobody</code></p>
</li>
<li><p>查找整个 linux 系统下大于 200M 的文件（+n 大于 -n 小于 n 等于, 单位有k,M,G）</p>
<p><code>find / -size +200M</code></p>
</li>
</ul>
</li>
<li><p>locate 搜索文件</p>
<blockquote>
<p>locate 指令可以快速定位文件路径</p>
<p>locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件</p>
<p>Locate 指令无需遍历整个文件系统，查询速度较快</p>
<p>为了保证查询结果的准确度，管理员必须定期更新 locate 时刻</p>
</blockquote>
</li>
<li><p>which 指令</p>
<blockquote>
<p>可以查看某个指令在哪个目录下</p>
<p>比如 ls 指令在哪个目录：which ls</p>
</blockquote>
</li>
<li><p>grep 指令和管道符号 <code>|</code></p>
<blockquote>
<p>grep [选项] 查找内容源文件</p>
<p>grep 过滤查找， 管道符 <code>|</code>，表示将前一个命令的处理结果输出传递给后面的命令处理</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/grep.png" alt="grep"></p>
<p>请在 hello.txt 文件中，查找”yes” 所在行，并且显示行号</p>
<p><code>cat /home/hello.txt | grep &quot;yes&quot;</code> 或 <code>grep -n &quot;yes&quot; /home/hello.txt</code></p>
</blockquote>
</li>
</ul>
</li>
<li><p>压缩和解压类</p>
<ul>
<li><p>gzip &#x2F; gunzip 指令</p>
<blockquote>
<p>gzip 用于压缩文件， gunzip 用于解压的</p>
<p>gzip 文件（功能描述：压缩文件，只能将文件压缩为*.gz 文件）</p>
<p>gunzip 文件.gz （功能描述：解压缩文件命令）</p>
</blockquote>
</li>
<li><p>zip &#x2F; unzip 指令</p>
<blockquote>
<p>zip [选项] XXX.zip 将要压缩的内容（功能描述：压缩文件和目录的命令）</p>
<p>unzip [选项] XXX.zip （功能描述：解压缩文件）</p>
<p>-r：递归压缩，即压缩目录</p>
<p>-d&lt;目录&gt; ：指定解压后文件的存放目录</p>
<p><code>zip -r myhome.zip /home/</code> [将home 目录及其包含的文件和子文件夹都压缩]</p>
</blockquote>
</li>
<li><p>tar 指令</p>
<blockquote>
<p>tar 指令是打包指令，最后打包后的文件是 <code>.tar.gz</code> 的文件</p>
<p>tar [选项] XXX.tar.gz 打包的内容(功能描述：打包目录，压缩后的文件格式.tar.gz)</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/tar.png" alt="tar"></p>
<p>将 <code>myhome.tar.gz</code> 解压到 <code>/opt/tmp2</code> 目录下</p>
<p><code>tar -zxvf /home/myhome.tar.gz -C /opt/tmp2</code></p>
</blockquote>
</li>
</ul>
</li>
</ol>
<h3 id="10-Linux-实操篇-组管理和权限管理"><a href="#10-Linux-实操篇-组管理和权限管理" class="headerlink" title="10.Linux 实操篇-组管理和权限管理"></a>10.Linux 实操篇-组管理和权限管理</h3><ol>
<li><p>组基本介绍</p>
<blockquote>
<p>在 linux 中的每个用户必须属于一个组，不能独立于组外</p>
<p>在 linux 中每个文件有所有者、所在组、其它组的概念</p>
</blockquote>
</li>
<li><p>文件 &#x2F; 目录所有者</p>
<blockquote>
<p>一般为文件的创建者,谁创建了该文件，就自然的成为该文件的所有者</p>
</blockquote>
<ul>
<li><p>查看文件 &#x2F; 目录所有者 <code>ls -ahl</code></p>
<blockquote>
<p>查看当前目录下所有文件和组目录</p>
</blockquote>
</li>
<li><p>修改文件 &#x2F; 目录所有者 <code>chown 用户名 文件名</code></p>
<blockquote>
<p>使用 root 创建一个文件 apple.txt ，然后将其所有者修改成 tom</p>
<p><code>chown tom apple.txt</code></p>
</blockquote>
</li>
</ul>
</li>
<li><p>组的创建</p>
<blockquote>
<p><code>groupadd 组名</code></p>
<p>创建一个用户 fox ，并放入到 monster 组中</p>
<p>useradd -g monster fox</p>
</blockquote>
</li>
<li><p>文件 &#x2F; 目录所在组</p>
<blockquote>
<p>当某个用户创建了一个文件后，这个文件的所在组就是该用户所在的组（默认）</p>
</blockquote>
<ul>
<li><p>查看文件 &#x2F; 目录所在组 <code>ls -ahl</code></p>
</li>
<li><p>修改文件 &#x2F; 目录所在组 <code>chgrp 组名 文件名</code></p>
<blockquote>
<p>使用 root 用户创建文件 orange.txt，然后将这个文件所在组，修改到 fruit 组</p>
<p><code>chgrp fruit orange.txt</code></p>
</blockquote>
</li>
</ul>
</li>
<li><p>其他组</p>
<blockquote>
<p>除文件的所有者和所在组的用户外，系统的其它用户都是文件的其它组</p>
</blockquote>
</li>
<li><p>改变用户所在组</p>
<blockquote>
<p>在添加用户时，可以指定将该用户添加到哪个组中，同样的用 root 的管理权限可以改变某个用户所在的组</p>
<p>usermod –g 新组名 用户名</p>
<p>usermod –d 目录名 用户名 改变该用户登陆的初始目录。特别说明：用户需要有进入到新目录的权限</p>
</blockquote>
</li>
<li><p>权限的基本介绍</p>
<blockquote>
<p><code>ls -l</code> 显示详情</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/ls-l.png" alt="ls-l"></p>
</blockquote>
<ul>
<li>第 0 位确定文件类型（d, - , l , c , b）<ul>
<li>l 是链接，相当于 windows 的快捷方式</li>
<li>d 是目录，相当于 windows 的文件夹</li>
<li>c 是字符设备文件，鼠标，键盘</li>
<li>b 是块设备，比如硬盘</li>
</ul>
</li>
<li>第 1-3 位确定所有者（该文件的所有者）拥有该文件的权限。—User</li>
<li>第 4-6 位确定所属组（同用户组的）拥有该文件的权限，—Group</li>
<li>第 7-9 位确定其他用户拥有该文件的权限—Other</li>
</ul>
</li>
<li><p><strong>rwx 权限详解（重难点）</strong></p>
<ul>
<li>rwx 含义（对于文件）<ul>
<li>[ r ] 代表可读(read)：可以读取,查看</li>
<li>[ w ] 代表可写(write)：可以修改，但是不代表可以删除该文件，删除一个文件的前提条件是对该文件所在的目录有写权限，才能删除该文件</li>
<li>[ x ] 代表可执行(execute)：可以被执行</li>
</ul>
</li>
<li>rwx 含义（对于目录）<ul>
<li>[ r ] 代表可读(read)：可以读取，ls 查看目录内容</li>
<li>[ w ] 代表可写(write)：可以修改，对目录内创建+删除+重命名文件 &#x2F; 目录</li>
<li>[ x ] 代表可执行(execute)：可以进入该目录</li>
</ul>
</li>
</ul>
</li>
<li><p>文件及目录权限实际案例</p>
<ul>
<li>第一组<code>rwx</code> : 文件拥有者的权限是读、写和执行</li>
<li>第二组<code>rw-</code> : 与文件拥有者同一组的用户的权限是读、写但不能执行</li>
<li>第三组<code>r--</code> : 不与文件拥有者同组的其他用户的权限是读不能写和执行</li>
</ul>
<blockquote>
<p>可用数字表示为：r&#x3D;4,w&#x3D;2,x&#x3D;1 因此 rwx&#x3D;4+2+1&#x3D;7，数字可以进行组合</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/ls-l.png" alt="ls-l"></p>
<p>后面其他字段分别是</p>
<p>2：文件（硬连接数）&#x2F; 目录（子目录数）</p>
<p>zcm：用户</p>
<p>zcm：组</p>
<p>6：文件大小；<strong>如果是文件夹，显示 4096 字节？？？</strong></p>
<p>11月 1 08:13：最后修改日期</p>
<p>module：文件 &#x2F; 目录名</p>
</blockquote>
</li>
<li><p>修改权限 chmod</p>
<blockquote>
<p>通过 chmod 指令，可以修改文件或者目录的权限</p>
</blockquote>
<ul>
<li><p><code>u:所有者</code> <code>g:所有组</code> <code>o:其他人</code> <code>a:所有人(u、g、o 的总和)</code></p>
<ul>
<li>chmod u&#x3D;rwx,g&#x3D;rx,o&#x3D;x 文件&#x2F;目录名</li>
<li>chmod o+w 文件&#x2F;目录名</li>
<li>chmod a-x 文件&#x2F;目录名</li>
</ul>
</li>
<li><p>案例一，通过 <code>+、-、=</code> 变更权限</p>
<ul>
<li>给 abc 文件的所有者读写执行的权限，给所在组读执行权限，给其它组读执行权限<br><code>chmod u=rwx,g=rx,o=rx abc</code></li>
<li>给 abc 文件的所有者除去执行的权限，增加组写的权限<br><code>chmod u-x,g+w abc</code></li>
<li>给abc 文件的所有用户添加读的权限<br><code>chmod a+r abc</code></li>
</ul>
</li>
<li><p>案例二，通过数字变更权限</p>
<blockquote>
<p>r&#x3D;4 w&#x3D;2 x&#x3D;1 rwx&#x3D;4+2+1&#x3D;7（0~7）</p>
<p>chmod u&#x3D;rwx,g&#x3D;rx,o&#x3D;x 文件目录名</p>
<p>相当于 chmod 751 文件&#x2F;目录名</p>
<p>将 <code>/home/abc.txt</code> 文件的权限修改成 rwxr-xr-x, 使用给数字的方式实现</p>
<p><code>chmod 755 /home/abc.txt</code></p>
</blockquote>
</li>
</ul>
</li>
<li><p>修改文件 &#x2F; 目录所有者 chown</p>
<blockquote>
<p><code>chown newowner 文件/目录</code>改变所有者</p>
<p><code>chown newowner:newgroup 文件/目录</code>改变所有者和所在组</p>
<p><code>-R</code> 如果是目录则使其下所有子文件或目录递归生效</p>
<p>请将 <code>/home/test</code> 目录下所有的文件和目录的所有者都修改成 tom</p>
<p><code>chown -R tom /home/test</code></p>
</blockquote>
</li>
<li><p>修改文件 &#x2F; 目录所有者 chgrp</p>
<blockquote>
<p><code>chgrp newgroup 文件/目录</code>【改变所在组】</p>
<p>请将 &#x2F;home&#x2F;test 目录下所有的文件和目录的所在组都修改成 shaolin</p>
<p><code>chgrp -R shaolin /home/test</code></p>
</blockquote>
</li>
</ol>
<h3 id="11-Linux-实操篇-定时任务调度"><a href="#11-Linux-实操篇-定时任务调度" class="headerlink" title="11.Linux 实操篇-定时任务调度"></a>11.Linux 实操篇-定时任务调度</h3><ol>
<li><p>crond 任务调度</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>任务调度：是指系统在某个时间执行的特定的命令或程序</p>
<p>任务调度分类：</p>
<ul>
<li><p>系统工作：有些重要的工作必须周而复始地执行。如病毒扫描</p>
</li>
<li><p>个别用户工作：个别用户可能希望执行某些程序，比如对 mysql 数据库的备份</p>
</li>
</ul>
</blockquote>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/crond.png" alt="crond"></p>
</li>
<li><p>基本使用</p>
<blockquote>
<p>crontab [选项]</p>
</blockquote>
<blockquote>
<p>常用选项</p>
<p><code>-e</code> 编辑 crontab 定时任务</p>
<p><code>-l</code> 查询 crontab 任务</p>
<p><code>-r</code> 删除当前用户所有的 crontab 任务</p>
</blockquote>
</li>
<li><p>快速入门</p>
<blockquote>
<p><a target="_blank" rel="noopener" href="https://cron.qqe2.com/">在线 cron 表达式生成器</a></p>
<p>设置任务调度文件：<code>/etc/crontab</code></p>
<p>设置个人任务调度：执行 <code>crontab –e</code> 命令</p>
<p>接着输入任务到调度文件</p>
<p>如：<code>*/1 * * * * ls –l /etc/ &gt; /tmp/to.txt</code></p>
<p>意思说每小时的每分钟执行 <code>ls –l /etc/ &gt; /tmp/to.txt</code> 命令</p>
</blockquote>
</li>
<li><p>案例</p>
<ul>
<li><p>每隔 1 分钟，就将当前的日期信息，追加到 <code>/tmp/mydate</code> 文件中</p>
<p><code>*/1 * * * * date &gt;&gt; /tmp/mydate</code></p>
</li>
<li><p>每隔 1 分钟， 将当前日期和日历都追加到 <code>/home/mycal</code> 文件中</p>
<p><code>*/1 * * * * /home/my.sh</code></p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">my.sh</span></span><br><span class="line">date &gt;&gt; /home/mycal</span><br><span class="line">cal &gt;&gt; /home/mycal</span><br></pre></td></tr></table></figure>
</li>
<li><p>每天凌晨 2:00 将 mysql 数据库 testdb ，备份到文件中</p>
<p><code>0 2 * * * mysqldump -u root -proot testdb &gt; /home/db.bak</code></p>
</li>
</ul>
</li>
<li><p>相关指令</p>
<ul>
<li>conrtab –r：终止任务调度</li>
<li>crontab –l：列出当前有那些任务调度</li>
<li>service crond restart [重启任务调度]</li>
</ul>
</li>
</ul>
</li>
<li><p>at 定时任务</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>at 命令是一次性定时计划任务，at 的守护进程 atd 会以后台模式运行，检查作业队列来运行</p>
<p>默认情况下，atd 守护进程每60 秒检查作业队列，有作业时，会检查作业运行时间，如果时间与当前时间匹配，则运行此作业</p>
<p>at 命令是一次性定时计划任务，执行完一个任务后不再执行此任务了</p>
<p>在使用 at 命令的时候，一定要保证 atd 进程的启动，可以使用相关指令来查看 <code>ps -ef | grep atd</code> 可以检测 atd 是否在运行</p>
</blockquote>
<p> <img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/at.png" alt="at"></p>
</li>
<li><p>基本使用</p>
<blockquote>
<p>at [选项] [时间]</p>
<p>输入两次 <code>Ctrl + D</code> 结束 at 命令的输入</p>
</blockquote>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/at%E9%80%89%E9%A1%B9.png" alt="at选项"></p>
</li>
<li><p>at 时间定义</p>
<ul>
<li><p>接受在当天的 hh:mm（小时:分钟）式的时间指定。</p>
<blockquote>
<p>假如该时间已过去，那么就放在第二天执行</p>
<p>例如：04:00</p>
</blockquote>
</li>
<li><p>使用 midnight（深夜），noon（中午），teatime（饮茶时间，一般是下午4 点）等比较模糊的词语来指定时间</p>
</li>
<li><p>采用 12 小时计时制，即在时间后面加上 AM（上午）或 PM（下午）来说明是上午还是下午</p>
<blockquote>
<p>例如：12pm</p>
</blockquote>
</li>
<li><p>指定命令执行的具体日期</p>
<blockquote>
<p>指定格式为 month day（月日）或 mm&#x2F;dd&#x2F;yy（月&#x2F;日&#x2F;年）或dd.mm.yy（日.月.年）</p>
<p>指定的日期必须跟在指定时间的后面</p>
<p>例如：04:00 2021-03-1</p>
</blockquote>
</li>
<li><p>使用相对计时法</p>
<blockquote>
<p>指定格式为：now + count time-units ，now 就是当前时间，time-units 是时间单位</p>
<p>这里能够是minutes（分钟）、hours（小时）、days（天）、weeks（星期）</p>
<p>count 是时间的数量，几天，几小时</p>
<p>例如：now + 5 minutes</p>
</blockquote>
</li>
<li><p>直接使用 today（今天）、tomorrow（明天）来指定完成命令的时间</p>
</li>
</ul>
</li>
<li><p>应用实例</p>
<ul>
<li><p>2 天后的下午5 点执行 &#x2F;bin&#x2F;ls &#x2F;home</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">at 5pm + 2 days</span><br><span class="line">at &gt; /bin/ls &gt; /home</span><br></pre></td></tr></table></figure>
</li>
<li><p>明天 17 点钟，输出时间到指定文件内比如 <code>/root/date100.log</code></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">at 5pm tomorrow</span><br><span class="line">at &gt; date &gt; /root/date100.log</span><br></pre></td></tr></table></figure>
</li>
<li><p>2 分钟后，输出时间到指定文件内比如 <code>/root/date200.log</code></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">at now + 2 minutes</span><br><span class="line">at &gt; date &gt; /root/date200.log</span><br></pre></td></tr></table></figure></li>
</ul>
</li>
<li><p>其他相关指令</p>
<ul>
<li><p>atq 命令来查看系统中没有执行的工作任务</p>
</li>
<li><p>删除已经设置的任务，<code>atrm 编号</code></p>
<blockquote>
<p><code>atrm 4</code> 表示将 job 队列，编号为 4 的 job 删除</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 id="12-Linux-实操篇-Linux-磁盘分区、挂载"><a href="#12-Linux-实操篇-Linux-磁盘分区、挂载" class="headerlink" title="12.Linux 实操篇-Linux 磁盘分区、挂载"></a>12.Linux 实操篇-Linux 磁盘分区、挂载</h3><ol>
<li><p>原理介绍</p>
<blockquote>
<p>Linux 来说无论有几个分区，分给哪一目录使用，它归根结底就只有一个根目录，一个独立且唯一的文件结构，Linux 中每个分区都是用来组成整个文件系统的一部分</p>
<p>Linux 采用了一种叫<code>载入</code>的处理方法，它的整个文件系统中包含了一整套的文件和目录，且将一个分区和一个目录联系起来</p>
<p>这时要载入的一个分区将使它的存储空间在一个目录下获得</p>
</blockquote>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA.png" alt="磁盘分区"></p>
</li>
<li><p>硬盘说明</p>
<blockquote>
<p>Linux 硬盘分 IDE 硬盘和 SCSI 硬盘，目前基本上是 SCSI 硬盘</p>
<p>对于 IDE 硬盘，驱动器标识符为<code>hdx~</code></p>
<ul>
<li><p><code>hd</code>表明分区所在设备的类型，这里是指 IDE 硬盘了</p>
</li>
<li><p><code>x</code>为盘号（a 为基本盘，b 为基本从属盘，c 为辅助主盘，d 为辅助从属盘）</p>
</li>
<li><p><code>~</code>代表分区，前四个分区用数字 1 到 4 表示，它们是主分区或扩展分区，从 5 开始就是逻辑分区</p>
</li>
</ul>
<p>例 <code>hda3</code> 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区，hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区</p>
<p>对于SCSI 硬盘则标识为 <code>sdx~</code>，SCSI 硬盘是用 <code>sd</code> 来表示分区所在设备的类型的，其余则和 IDE 硬盘的表示方法一样</p>
</blockquote>
<ul>
<li><p>查看所有设备挂载情况 <code>lsblk</code>、<code>lsblk -f</code></p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/%E6%9F%A5%E7%9C%8B%E7%A3%81%E7%9B%98%E6%8C%82%E8%BD%BD.png" alt="查看磁盘挂载"></p>
</li>
</ul>
</li>
<li><p>挂载的步骤</p>
<ul>
<li>虚拟机添加硬盘</li>
<li>分区</li>
<li>格式化</li>
<li>挂载</li>
<li>设置可以自动挂载</li>
</ul>
</li>
<li><p>磁盘情况查询</p>
<ul>
<li><p>查询系统整体磁盘使用情况 <code>df -h</code></p>
<blockquote>
<p>查询指定目录的磁盘占用情况，默认为当前目录</p>
<p><code>-s</code> 指定目录占用大小汇总</p>
<p><code>-h</code> 带计量单位</p>
<p><code>-a</code> 含文件</p>
<p><code>--max-depth=1</code> 子目录深度</p>
<p><code>-c</code> 列出明细的同时，增加汇总值</p>
</blockquote>
<p> <img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/df-h.png" alt="df-h"></p>
</li>
</ul>
</li>
<li><p>其他相关命令</p>
<ul>
<li><p>统计&#x2F;opt 文件夹下文件的个数<br><code>ls -l /opt | grep &quot;^-&quot; | wc -l</code></p>
</li>
<li><p>统计&#x2F;opt 文件夹下目录的个数<br><code>ls -l /opt | grep &quot;^d&quot; | wc -l</code></p>
</li>
<li><p>统计&#x2F;opt 文件夹下文件的个数，包括子文件夹里的</p>
<p><code>ls -lR /opt | grep &quot;^-&quot; | wc -l</code></p>
</li>
<li><p>统计&#x2F;opt 文件夹下目录的个数，包括子文件夹里的<br><code>ls -lR /opt | grep &quot;^d&quot; | wc -l</code></p>
</li>
<li><p>以树状显示目录结构 tree 目录（如果没有 tree，则使用 yum install tree 安装）</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/tree.png" alt="tree"></p>
</li>
</ul>
</li>
</ol>
<h3 id="13-Linux-实操篇-网络配置"><a href="#13-Linux-实操篇-网络配置" class="headerlink" title="13.Linux 实操篇-网络配置"></a>13.Linux 实操篇-网络配置</h3><ol>
<li><p>Linux 网络配置原理图</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE.png" alt="网络配置"></p>
</li>
<li><p>查看网络 IP 和网关</p>
<ul>
<li>查看虚拟网络编辑器</li>
<li><code>ifconfig</code></li>
</ul>
</li>
<li><p>配置动态 &#x2F; 静态 IP</p>
<ul>
<li>动态 IP（默认）</li>
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/weixin_44262119/article/details/122280882">静态 IP</a></li>
</ul>
</li>
<li><p>设置主机名和 hosts 映射</p>
<ul>
<li><code>/etc/hostname</code></li>
<li><code>/etc/hosts</code></li>
</ul>
</li>
</ol>
<h3 id="14-Linux-实操篇-进程管理（重点）"><a href="#14-Linux-实操篇-进程管理（重点）" class="headerlink" title="14.Linux 实操篇-进程管理（重点）"></a>14.Linux 实操篇-进程管理（重点）</h3><ol>
<li><p>基本介绍</p>
<blockquote>
<p>在LINUX 中，每个执行的程序都称为一个进程。每一个进程都分配一个ID 号(pid,进程号)&#x3D;&gt;windows &#x3D;&gt; linux</p>
<p>每个进程都可能以两种方式存在的。前台与后台，所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作，但由于屏幕上无法看到的进程，通常使用后台方式执行</p>
<p>一般系统的服务都是以后台进程的方式存在，而且都会常驻在系统中。直到关机才才结束</p>
</blockquote>
</li>
<li><p>显示系统执行的进程</p>
<blockquote>
<p><strong>ps 命令是用来查看目前系统中，有哪些正在执行，以及它们执行的状况。可以不加任何参数</strong></p>
</blockquote>
<ul>
<li><p>PS 详解</p>
<blockquote>
<p>指令：ps –aux|grep xxx ，比如看看有没有 sshd 服务 <code>ps –aux|grep sshd</code></p>
<p><code>System V</code> 展示风格<br><code>USER</code>：用户名称<br><code>PID</code>：进程号<br><code>%CPU</code>：进程占用CPU 的百分比<br><code>%MEM</code>：进程占用物理内存的百分比<br><code>VSZ</code>：进程占用的虚拟内存大小（单位：KB）<br><code>RSS</code>：进程占用的物理内存大小（单位：KB）<br><code>TT</code>：终端名称,缩写.<br><code>STAT</code>：进程状态，其中S-睡眠，s-表示该进程是会话的先导进程，N-表示进程拥有比普通优先级更低的优先级，R-正在运行，D-短期等待，Z-僵死进程，T-被跟踪或者被停止等等<br><code>STARTED</code>：进程的启动时间<br><code>TIME</code>：CPU 时间，即进程使用CPU 的总时间<br><code>COMMAND</code>：启动进程所用的命令和参数，如果过长会被截断显示</p>
</blockquote>
</li>
<li><p>应用实例</p>
<blockquote>
<p>要求：以全格式显示当前所有的进程，查看进程的父进程。查看 sshd 的父进程信息</p>
<p>ps -ef 是以全格式显示当前所有的进程</p>
<p>-e 显示所有进程；-f 全格式</p>
<p>ps -ef|grep sshd</p>
</blockquote>
</li>
</ul>
</li>
<li><p>终止进程 kill、killall</p>
<blockquote>
<p>若是某个进程执行一半需要停止时，或是已消了很大的系统资源时，此时可以考虑停止该进程。使用 kill 命令来完成此项任务</p>
</blockquote>
<ul>
<li><p>基本语法</p>
<blockquote>
<p>kill [选项] 进程号（功能描述：通过进程号杀死&#x2F;终止进程）<br>killall 进程名称（功能描述：通过进程名称杀死进程，也支持通配符，这在系统因负载过大而变得很慢时很有用）</p>
<p>-9: 表示强迫进程立即停止</p>
</blockquote>
</li>
<li><p>案例</p>
<ul>
<li><p>踢掉某个非法登录用户</p>
<p>kill 进程号，比如 <code>kill 11421</code></p>
</li>
<li><p>终止远程登录服务 sshd</p>
<p>kill sshd 对应的进程号</p>
</li>
<li><p>终止多个 gedit</p>
<p>killall gedit</p>
</li>
<li><p>强制杀掉一个终端</p>
<p>指令 kill -9 bash 对应的进程号</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>查看进程树 pstree</p>
<ul>
<li><p>基本语法</p>
<blockquote>
<p>pstree [选项]，可以更加直观的来看进程信息</p>
<p>-p：显示进程的PID</p>
<p>-u：显示进程的所属用户</p>
</blockquote>
</li>
<li><p>应用实例</p>
<ul>
<li><p>树状的形式显示进程的 pid</p>
<p>pstree -p</p>
</li>
<li><p>树状的形式进程的用户</p>
<p>pstree -u</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>服务(service)管理</p>
<blockquote>
<p>服务(service) 本质就是进程，但是是运行在后台的，通常都会监听某个端口，等待其它程序的请求，比如(mysqld , sshd 防火墙等)，因此又称为守护进程，是 Linux 中非常重要的知识点</p>
</blockquote>
<ul>
<li><p>service 管理指令</p>
<ul>
<li>service 服务名 [start | stop | restart | reload | status]</li>
<li>在 CentOS7.0 后很多服务不再使用 service，而是 systemctl</li>
<li>service 指令管理的服务在 <code>/etc/init.d</code> 查看</li>
</ul>
</li>
<li><p>案例</p>
<blockquote>
<p>请使用 service 指令，查看，关闭，启动 network</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">service network status</span><br><span class="line">service network stop</span><br><span class="line">service network start</span><br></pre></td></tr></table></figure>
</li>
<li><p>查看服务名</p>
<p><code>/etc/init.d</code> 看到 service 指令管理的服务</p>
</li>
<li><p>服务的运行级别</p>
<blockquote>
<p>常用 3 和 5</p>
</blockquote>
<ul>
<li>运行级别0：系统停机状态，系统默认运行级别不能设为 0，否则不能正常启动</li>
<li>运行级别1：单用户工作状态，root 权限，用于系统维护，禁止远程登陆</li>
<li>运行级别2：多用户状态(没有 NFS)，不支持网络</li>
<li>运行级别3：完全的多用户状态(有 NFS)，无界面，登陆后进入控制台命令行模式</li>
<li>运行级别4：系统未使用，保留</li>
<li>运行级别5：X11 控制台，登陆后进入图形 GUI 模式</li>
<li>运行级别6：系统正常关闭并重启，默认运行级别不能设为 6，否则不能正常启动</li>
</ul>
</li>
<li><p>systemctl 管理指令</p>
<ul>
<li><p>基本语法</p>
<blockquote>
<p>systemctl [start | stop | restart | status] 服务名</p>
<p>systemctl 指令管理的服务在 <code>/usr/lib/systemd/system</code> 查看</p>
<p>systemctl list-unit-files [ | grep 服务名] (查看服务开机启动状态, grep 可以进行过滤)</p>
<p>systemctl enable 服务名(设置服务开机启动)</p>
<p>systemctl disable 服务名(关闭服务开机启动)</p>
<p>systemctl is-enabled 服务名(查询某个服务是否是自启动的)</p>
</blockquote>
</li>
<li><p>案例</p>
<blockquote>
<p>查看当前防火墙的状况，关闭防火墙和重启防火墙 &#x3D;&gt; firewalld.service</p>
<p>systemctl status firewalld</p>
<p>systemctl stop firewalld</p>
<p>systemctl start firewalld</p>
</blockquote>
<blockquote>
<p>关闭或者启用防火墙后，立即生效 [telnet 测试某个端口即可]</p>
<p>这种方式只是临时生效，当重启系统后，还是回归以前对服务的设置</p>
<p>如果希望设置某个服务自启动或关闭永久生效，要使用 systemctl [enable|disable] 服务名</p>
</blockquote>
</li>
</ul>
</li>
<li><p>端口相关指令 firewall</p>
<ul>
<li><p>基本语法</p>
<blockquote>
<p>打开端口: firewall-cmd –permanent –add-port&#x3D;端口号&#x2F;协议</p>
<p>关闭端口: firewall-cmd –permanent –remove-port&#x3D;端口号&#x2F;协议</p>
<p>重新载入,才能生效: firewall-cmd –reload</p>
<p>查询端口是否开放: firewall-cmd –query-port&#x3D;端口&#x2F;协议</p>
</blockquote>
</li>
<li><p>案例</p>
<blockquote>
<p>启用防火墙， 测试 111 端口是否能 telnet （不能）</p>
<p>开放111 端口：firewall-cmd –permanent –add-port&#x3D;111&#x2F;tcp （需要 firewall-cmd –reload）</p>
<p>再次关闭111 端口：firewall-cmd –permanent –remove-port&#x3D;111&#x2F;tcp （需要firewall-cmd –reload）</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li><p>动态监控进程</p>
<ul>
<li><p>基本语法</p>
<blockquote>
<p>top 与 ps 命令很相似，它们都用来显示正在执行的进程</p>
<p>Top 与 ps 最大的不同之处，在于 top 在执行一段时间可以更新正在运行的的进程</p>
<p>top [选项]</p>
</blockquote>
<p> <img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/top.png" alt="top"></p>
<p> <img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/top2.png" alt="top2"></p>
</li>
<li><p>案例</p>
<ul>
<li><p>监视特定用户，比如监控 tom 用户</p>
<blockquote>
<p>top：输入此命令，按回车键，查看执行的进程</p>
<p>u：然后输入“u”回车，再输入用户名即可</p>
</blockquote>
</li>
<li><p>终止指定的进程，比如要结束 tom 登录</p>
<blockquote>
<p>top：输入此命令，按回车键，查看执行的进程</p>
<p>k：然后输入“k”回车，再输入要结束的进程ID 号</p>
</blockquote>
</li>
<li><p>指定系统状态更新的时间(每隔10 秒自动更新), 默认是3 秒</p>
<blockquote>
<p>top -d 10</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li><p>监控网络状态 netstat</p>
<ul>
<li><p>基本语法</p>
<blockquote>
<p>netstat [选项]</p>
<p>-an 按一定顺序排列输出</p>
<p>-p 显示哪个进程在调用</p>
</blockquote>
</li>
<li><p>案例</p>
<ul>
<li><p>请查看服务名为sshd 的服务的信息</p>
<p>netstat -anp | grep sshd</p>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 id="15-Linux-实操篇-RPM-与-YUM"><a href="#15-Linux-实操篇-RPM-与-YUM" class="headerlink" title="15.Linux 实操篇-RPM 与 YUM"></a>15.Linux 实操篇-RPM 与 YUM</h3><ol>
<li><p>rpm 包的管理</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>rpm 用于互联网下载包的打包及安装工具，它包含在某些 Linux 分发版中</p>
<p>它生成具有 <code>.RPM</code> 扩展名的文件</p>
<p>RPM 是 RedHat Package Manager（RedHat 软件包管理工具）的缩写，类似 windows 的setup.exe，这一文件格式名称虽然打上了 RedHat 的标志，但理念是通用的<br>Linux 的分发版本都有采用（suse,redhat, centos 等等），可以算是公认的行业标准了</p>
</blockquote>
</li>
<li><p>rpm 包的简单查询指令</p>
<blockquote>
<p>查询已安装的 rpm 列表 rpm –qa|grep xx</p>
<p>查看当前系统是否安装了 firefox：<code>rpm -qa | grep firefox</code></p>
</blockquote>
</li>
<li><p>rpm 包名基本格式</p>
<blockquote>
<p>一个rpm 包名：firefox-60.2.2-1.el7.centos.x86_64</p>
<p>名称: firefox<br>版本号：60.2.2-1<br>适用操作系统: el7.centos.x86_64<br>表示 centos7.x 的64 位系统<br>如果是 i686、i386 表示 32 位系统，noarch 表示通用</p>
</blockquote>
</li>
<li><p>rpm 包的其他查询指令</p>
<blockquote>
<p>rpm -qa：查询所安装的所有rpm 软件包</p>
<p>rpm -qa | more</p>
<p>rpm -qa | grep X [rpm -qa | grep firefox ]</p>
</blockquote>
<blockquote>
<p><code>rpm -q</code> 软件包名：查询软件包是否安装<br>案例：rpm -q firefox</p>
<p><code>rpm -qi</code> 软件包名：查询软件包信息<br>案例: rpm -qi firefox</p>
<p><code>rpm -ql</code> 软件包名：查询软件包中的文件<br>比如： rpm -ql firefox</p>
</blockquote>
<blockquote>
<p>rpm -qf 文件全路径名查询文件所属的软件包</p>
<p>rpm -qf &#x2F;etc&#x2F;passwd</p>
<p>rpm -qf &#x2F;root&#x2F;install.log</p>
</blockquote>
</li>
<li><p>卸载 rpm 包</p>
<blockquote>
<p>rpm -e RPM 包的名称&#x2F;&#x2F;erase</p>
<p>删除 firefox 软件包：rpm -e firefox</p>
<p>如果其它软件包依赖于要卸载的软件包，卸载时则会产生错误信息</p>
<p>可以增加参数<code>--nodeps</code>，就可以强制删除，但是一般不推荐这样做，因为依赖于该软件包的程序可能无法运行</p>
</blockquote>
</li>
<li><p>安装 rpm 包</p>
<blockquote>
<p>rpm -ivh RPM 包全路径名称</p>
<p>i&#x3D;install 安装<br>v&#x3D;verbose 提示<br>h&#x3D;hash 进度条</p>
</blockquote>
<blockquote>
<p>演示安装 firefox 浏览器：rpm -ivh firefox</p>
</blockquote>
</li>
</ul>
</li>
<li><p>yum</p>
<ul>
<li><p>简单介绍</p>
<blockquote>
<p>Yum 是一个 Shell 前端软件包管理器</p>
<p>基于 RPM 包管理，能够从指定的服务器自动下载 RPM 包并且安装，可以自动处理依赖性关系，并且一次安装所有依赖的软件包</p>
</blockquote>
</li>
<li><p>基本指令</p>
<ul>
<li><p>查询yum 服务器是否有需要安装的软件</p>
<p>yum list|grep xx 软件列表</p>
</li>
<li><p>安装指定的 yum 包</p>
<p>yum install xxx</p>
</li>
</ul>
</li>
<li><p>应用实例</p>
<ul>
<li><p>使用 yum 的方式来安装 firefox</p>
<blockquote>
<p>rpm -e firefox</p>
<p>yum list | grep firefox</p>
<p>yum install firefox</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 id="16-Linux-高级篇-日志管理"><a href="#16-Linux-高级篇-日志管理" class="headerlink" title="16.Linux 高级篇-日志管理"></a>16.Linux 高级篇-日志管理</h3><ol>
<li><p>基本介绍</p>
<ul>
<li>日志文件是重要的系统信息文件，其中记录了许多重要的系统事件，包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等</li>
<li>日志对于安全来说也很重要，它记录了系统每天发生的各种事情，通过日志来检查错误发生的原因，或者受到攻击时攻击者留下的痕迹</li>
<li>可以这样理解日志是用来记录重大事件的工具</li>
</ul>
</li>
<li><p>系统常用的日志</p>
<blockquote>
<p><code>/var/log/</code> 目录就是系统日志文件的保存位置</p>
</blockquote>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/log.png" alt="log"></p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/%E5%B8%B8%E7%94%A8%E7%9A%84%E6%97%A5%E5%BF%97.png" alt="常用的日志"></p>
</li>
<li><p>日志管理服务 rsyslogd</p>
<blockquote>
<p>CentOS7.6 日志服务是 rsyslogd ， CentOS6.x 日志服务是 syslogd</p>
<p>rsyslogd 功能更强大</p>
<p>rsyslogd 的使用、日志文件的格式，和 syslogd 服务兼容的</p>
<p>原理示意图</p>
</blockquote>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/log%E5%8E%9F%E7%90%86%E5%9B%BE.png" alt="log原理图"></p>
<ul>
<li><p>案例</p>
<ul>
<li><p>查询 Linux 中的 rsyslogd 服务是否启动</p>
<p><code>ps aux | grep &quot;rsyslog&quot; | grep -v &quot;grep&quot;</code></p>
</li>
<li><p>查询 rsyslogd 服务的自启动状态</p>
<p><code>systemctl list-unit-files | grep rsyslog</code></p>
</li>
<li><p>配置文件：<code>/etc/rsyslog.conf</code></p>
<blockquote>
<p>编辑文件时的格式为： <code>*.*</code> 存放日志文件</p>
<p>其中第一个<code>*</code>代表日志类型，第二个<code>*</code>代表日志级别</p>
</blockquote>
</li>
</ul>
</li>
<li><p>日志类型</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">- auth					## pam 产生的日志</span><br><span class="line">- authpriv				## ssh、ftp 等登录信息的验证信息</span><br><span class="line">- corn 					## 时间任务相关</span><br><span class="line">- kern					## 内核</span><br><span class="line">- lpr 					## 打印</span><br><span class="line">- mail 					## 邮件</span><br><span class="line">- mark(syslog)-rsyslog	## 服务内部的信息，时间标识</span><br><span class="line">- news 					## 新闻组</span><br><span class="line">- user 					## 用户程序产生的相关信息</span><br><span class="line">- uucp 					## unix to nuix copy 主机之间相关的通信</span><br><span class="line">- local 1-7 			## 自定义的日志设备</span><br></pre></td></tr></table></figure>
</li>
<li><p>日志级别</p>
<blockquote>
<p>从上到下，级别从低到高，记录信息越来越少</p>
</blockquote>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">- debug 		## 有调试信息的，日志通信最多</span><br><span class="line">- info 			## 一般信息日志，最常用</span><br><span class="line">- notice 		## 最具有重要性的普通条件的信息</span><br><span class="line">- warning 		## 警告级别</span><br><span class="line">- err 			## 错误级别，阻止某个功能或者模块不能正常工作的信息</span><br><span class="line">- crit 			## 严重级别，阻止整个系统或者整个软件不能正常工作的信息</span><br><span class="line">- alert 		## 需要立刻修改的信息</span><br><span class="line">- emerg			## 内核崩溃等重要信息</span><br><span class="line">- none 			## 什么都不记录</span><br></pre></td></tr></table></figure>
</li>
<li><p>日志格式</p>
<blockquote>
<p>由日志服务 rsyslogd 记录的日志文件，日志文件的格式包含以下 4 列</p>
</blockquote>
<ul>
<li>事件产生的时间</li>
<li>产生事件的服务器的主机名</li>
<li>产生事件的服务名或程序名</li>
<li>事件的具体信息</li>
</ul>
</li>
</ul>
</li>
<li><p>日志轮替</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>日志轮替就是把旧的日志文件移动并改名，同时建立新的空日志文件，当旧日志文件超出保存的范围之后，就会进行删除</p>
</blockquote>
</li>
<li><p>日志轮替文件命名</p>
<ul>
<li>centos7 使用 <code>logrotate</code> 进行日志轮替管理，要想改变日志轮替文件名字，通过 <code>/etc/logrotate.conf</code> 配置文件中 <code>dateext</code> 参数</li>
<li>如果配置文件中有 <code>dateext</code> 参数，那么日志会用日期来作为日志文件的后缀，例如 <code>secure-20201010</code>。这样日志文件名不会重叠，也就不需要日志文件的改名， 只需要指定保存日志个数，删除多余的日志文件即可</li>
<li>如果配置文件中没有 <code>dateext</code> 参数，日志文件就需要进行改名了。当第一次进行日志轮替时，当前的 <code>secure</code> 日志会自动改名为 <code>secure.1</code>，然后新建 <code>secure</code> 日志， 用来保存新的日志。当第二次进行日志轮替时，<code>secure.1</code> 会自动改名为 <code>secure.2</code>， 当前的 <code>secure</code> 日志会自动改名为 <code>secure.1</code> ，然后也会新建 <code>secure</code> 日志，用来保存新的日志，以此类推</li>
</ul>
</li>
<li><p>logrotate 配置文件</p>
<blockquote>
<p><code>/etc/logrotate.conf</code> 为 <code>logrotate</code> 的全局配置文件</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">rotate <span class="built_in">log</span> files weekly, 每周对日志文件进行一次轮替</span></span><br><span class="line">weekly</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">keep 4 weeks worth of backlogs, 共保存4 份日志文件，当建立新的日志文件时，旧的将会被删除</span></span><br><span class="line">rotate 4</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">create new (empty) <span class="built_in">log</span> files after rotating old ones, 创建新的空的日志文件，在日志轮替后</span></span><br><span class="line">create</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">use <span class="built_in">date</span> as a suffix of the rotated file, 使用日期作为日志轮替文件的后缀</span></span><br><span class="line">dateext</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">uncomment this <span class="keyword">if</span> you want your <span class="built_in">log</span> files compressed, 日志文件是否压缩。如果取消注释，则日志会在转储的同时进行压缩</span></span><br><span class="line">compress</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">RPM packages drop <span class="built_in">log</span> rotation information into this directory</span></span><br><span class="line">include /etc/logrotate.d</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">包含/etc/logrotate.d/ 目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来，</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">下面是单独设置，优先级更高。</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">no packages own wtmp and btmp -- we<span class="string">&#x27;ll rotate them here</span></span></span><br><span class="line">/var/log/wtmp &#123;</span><br><span class="line">	monthly 				# 每月对日志文件进行一次轮替</span><br><span class="line">	create 0664 root utmp 	# 建立的新日志文件，权限是0664 ，所有者是root ，所属组是utmp 组</span><br><span class="line">    minsize 1M 				# 日志文件最小轮替大小是1MB 。也就是日志一定要超过1MB 才会轮替，否则就算时间达到一个月，也不进行日志转储</span><br><span class="line">    rotate 1 				# 仅保留一个日志备份。也就是只有wtmp 和wtmp.1 日志保留而已</span><br><span class="line">&#125;</span><br><span class="line">/var/log/btmp &#123;</span><br><span class="line">    missingok 				# 如果日志不存在，则忽略该日志的警告信息</span><br><span class="line">    monthly</span><br><span class="line">    create 0600 root utmp</span><br><span class="line">    rotate 1</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<blockquote>
<p>参数说明</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">daily 					日志的轮替周期是每天</span><br><span class="line">weekly 					日志的轮替周期是每周</span><br><span class="line">monthly 				日志的轮替周期是每月</span><br><span class="line">rotate 					数字保留的日志文件的个数。0 指没有备份</span><br><span class="line">compress 				日志轮替时，旧的日志进行压缩</span><br><span class="line">create mode owner group 建立新日志，同时指定新日志的权限与所有者和所属组。</span><br><span class="line">mail address 			当日志轮替时，输出内容通过邮件发送到指定的邮件地址。</span><br><span class="line">missingok 				如果日志不存在，则忽略该日志的警告信息</span><br><span class="line">notifempty 				如果日志为空文件，则不进行日志轮替</span><br><span class="line">minsize 				大小日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替，否则就算时间达到也不轮替</span><br><span class="line">size 					大小日志只有大于指定大小才进行日志轮替，而不是按照时间轮替。</span><br><span class="line">dateext 				使用日期作为日志轮替文件的后缀。</span><br><span class="line">sharedscripts 			在此关键字之后的脚本只执行一次。</span><br><span class="line">prerotate/endscript 	在日志轮替之前执行脚本命令。</span><br><span class="line">postrotate/endscript 	在日志轮替之后执行脚本命令。</span><br></pre></td></tr></table></figure>
</li>
<li><p>把自己的日志加入日志轮替</p>
<blockquote>
<p>第一种方法是直接在 <code>/etc/logrotate.conf</code> 配置文件中写入该日志的轮替策略</p>
<p>第二种方法是在 <code>/etc/logrotate.d/</code> 目录中新建立该日志的轮替文件，在该轮替文件中写入正确的轮替策略，因为该目录<br>中的文件都会被 include 到主配置文件中，所以也可以把日志加入轮替</p>
<p>推荐使用第二种方法，因为系统中需要轮替的日志非常多，如果全都直接写入 <code>/etc/logrotate.conf</code> 配置文件，那么这<br>个文件的可管理性就会非常差，不利于此文件的维护</p>
</blockquote>
</li>
<li><p>应用实例</p>
<blockquote>
<p>在 <code>/etc/logrotate.conf</code> 进行配置, 或者直接在 <code>/etc/logrotate.d/</code> 下创建文件 <code>hsplog</code> 编写如下内容，具体轮替的效果可以参考 <code>/var/log</code> 下的 <code>boot.log</code> 情况</p>
</blockquote>
<p> <img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/logrotate.png" alt="logrotate"></p>
</li>
<li><p>日志替换机制</p>
<blockquote>
<p>日志轮替之所以可以在指定的时间备份日志，是依赖系统定时任务。在 <code>/etc/cron.daily/</code> 目录，就会发现这个目录中是有logrotate 文件(可执行)，logrotate 通过这个文件依赖定时任务执行的</p>
</blockquote>
</li>
</ul>
</li>
<li><p>查看内存日志</p>
<blockquote>
<p><code>journalctl</code> 可以查看内存日志，常用的指令如下</p>
<p>注意: <code>journalctl</code> 查看的是内存日志，重启清空</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">journalctl 									## 查看全部</span><br><span class="line">journalctl -n 3 							## 查看最新3 条</span><br><span class="line">journalctl --since 19:00 --until 19:10:10 	## 查看起始时间到结束时间的日志可加日期</span><br><span class="line">journalctl -p err 							## 报错日志</span><br><span class="line">journalctl -o verbose 						## 日志详细内容</span><br><span class="line">journalctl _PID=1245 _COMM=sshd 			## 查看包含这些参数的日志（在详细日志查看）</span><br><span class="line">或者journalctl | grep sshd</span><br></pre></td></tr></table></figure></li>
</ol>
<h3 id="17-Linux-高级篇-定制-Linux-系统"><a href="#17-Linux-高级篇-定制-Linux-系统" class="headerlink" title="17.Linux 高级篇-定制 Linux 系统"></a>17.Linux 高级篇-定制 Linux 系统</h3><ol>
<li><p>基本介绍</p>
<blockquote>
<p>通过裁剪现有 Linux 系统(CentOS7.6)，创建属于自己的 min Linux 小系统，可以加深对 linux 的理解</p>
</blockquote>
</li>
<li><p>基本原理</p>
<blockquote>
<p>制作 Linux 小系统之前，再了解一下 Linux 的启动流程：</p>
</blockquote>
<ul>
<li>首先 Linux 要通过自检，检查硬件设备有没有故障</li>
<li>如果有多块启动盘的话，需要在 BIOS 中选择启动磁盘</li>
<li>启动 MBR 中的 bootloader 引导程序</li>
<li>加载内核文件</li>
<li>执行所有进程的父进程、老祖宗 systemd</li>
<li>欢迎界面</li>
</ul>
<blockquote>
<p>在Linux 的启动流程中，加载内核文件时关键文件：</p>
<p>kernel 文件：<code>vmlinuz-3.10.0-957.el7.x86_64</code><br>initrd 文件：<code>initramfs-3.10.0-957.el7.x86_64.img</code></p>
</blockquote>
</li>
<li><p>制作 min Linux 思路分析</p>
<ul>
<li><p>在现有的 Linux 系统(centos7.6)上加一块硬盘 <code>/dev/sdb</code>，在硬盘上分两个分区，一个是<code>/boot</code>，一个是<code>/</code>，并将其格式化</p>
<blockquote>
<p>需要明确的是，现在加的这个硬盘在现有的 Linux 系统中是 <code>/dev/sdb</code>，但是，当我们把东西全部设置好时，要把这个<br>硬盘拔除，放在新系统上，此时就是 <code>/dev/sda</code></p>
</blockquote>
</li>
<li><p>在 <code>/dev/sdb</code> 硬盘上，将其打造成独立的 Linux 系统，里面的所有文件是需要拷贝进去的</p>
</li>
<li><p>作为能独立运行的 Linux 系统，内核是一定不能少，要把内核文件和 <code>initramfs</code> 文件也一起拷到 <code>/dev/sdb</code> 上</p>
</li>
<li><p>以上步骤完成，我们的自制 Linux 就完成, 创建一个新的 linux 虚拟机，将其硬盘指向我们创建的硬盘，启动即可</p>
</li>
</ul>
</li>
</ol>
<h3 id="18-Linux-内核源码解读（看课）"><a href="#18-Linux-内核源码解读（看课）" class="headerlink" title="18.Linux 内核源码解读（看课）"></a>18.Linux 内核源码解读（<a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1Sv411r7vd/?p=129">看课</a>）</h3><h3 id="19-Linux-系统-备份与恢复"><a href="#19-Linux-系统-备份与恢复" class="headerlink" title="19.Linux 系统-备份与恢复"></a>19.Linux 系统-备份与恢复</h3><ol>
<li><p>基本介绍</p>
<blockquote>
<p>实体机无法做快照，如果系统出现异常或者数据损坏，后果严重， 要重做系统，还会造成数据丢失</p>
<p>所以可以使用备份和恢复技术</p>
<p>linux 的备份和恢复很简单， 有两种方式：</p>
</blockquote>
<ul>
<li>把需要的文件(或者分区)用 TAR 打包就行，下次需要恢复的时候，再解压开覆盖即可</li>
</ul>
<ol start="2">
<li>使用 dump 和 restore 命令</li>
</ol>
</li>
<li><p>用 dump 备份</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>dump 支持分卷和增量备份（所谓增量备份是指备份上次备份后修改 &#x2F; 增加过的文件，也称差异备份）</p>
</blockquote>
</li>
<li><p>dump 语法说明</p>
<blockquote>
<p>dump [ -cu] [-123456789] [ -f &lt;备份后文件名&gt;] [-T &lt;日期&gt;] [ 目录或文件系统]</p>
<p>dump []-wW</p>
</blockquote>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">-c ：创建新的归档文件，并将由一个或多个文件参数所指定的内容写入归档文件的开头。</span><br><span class="line">-0123456789：备份的层级。0 为最完整备份，会备份所有文件。若指定 0 以上的层级，则备份至上一次备份以来</span><br><span class="line">修改或新增的文件, 到 9 后，可以再次轮替.</span><br><span class="line">-f : &lt;备份后文件名&gt;： 指定备份后文件名</span><br><span class="line">-j : 调用bzlib 库压缩备份文件，也就是将备份后的文件压缩成bz2 格式，让文件更小</span><br><span class="line">-T : &lt;日期&gt;： 指定开始备份的时间与日期</span><br><span class="line">-u ：备份完毕后，在/etc/dumpdares 中记录备份的文件系统，层级，日期与时间等。</span><br><span class="line">-t ：指定文件名，若该文件已存在备份文件中，则列出名称</span><br><span class="line">-W ：显示需要备份的文件及其最后一次备份的层级，时间，日期。</span><br><span class="line">-w ：与-W 类似，但仅显示需要备份的文件</span><br></pre></td></tr></table></figure>
</li>
<li><p>应用案例</p>
<ul>
<li><p>将 <code>/boot</code> 分区所有内容备份到 <code>/opt/boot.bak0.bz2</code> 文件中，备份层级为 <code>0</code></p>
<p><code>dump -0uj -f /opt/boot.bak0.bz2 /boot</code></p>
</li>
<li><p>在 <code>/boot</code> 目录下增加新文件，备份层级为<code>1</code>（只备份上次使用层次<code>0</code>备份后发生过改变的数据），注意比较看看<br>这次生成的备份文件 <code>boot1.bak</code> 有多大</p>
<p><code>dump -1uj -f /opt/boot.bak1.bz2 /boot</code></p>
</li>
</ul>
</li>
<li><p>查看备份时间文件</p>
<p><code>cat /etc/dumpdates</code></p>
</li>
<li><p>备份文件或目录</p>
<blockquote>
<p>前面我们在备份分区时，是可以支持增量备份的，如果备份文件或者目录，不再支持增量备份, 即只能使用 0 级别备份</p>
</blockquote>
<blockquote>
<p>使用 dump 备份 &#x2F;etc 整个目录</p>
<p><code>dump -0j -f /opt/etc.bak.bz2 /etc/</code></p>
</blockquote>
</li>
</ul>
</li>
<li><p>用 restore 恢复</p>
<ul>
<li><p>基本介绍</p>
<blockquote>
<p>restore 命令用来恢复已备份的文件，可以从 dump 生成的备份文件中恢复原文件</p>
</blockquote>
</li>
<li><p>restore 基本语法</p>
<blockquote>
<p>restore [模式选项] [选项]</p>
</blockquote>
<blockquote>
<p><strong>模式选项</strong>， 不能混用，在一次命令中， 只能指定一种</p>
<p>-C ：使用对比模式，将备份的文件与已存在的文件相互对比</p>
<p>-i：使用交互模式，在进行还原操作时，restors 指令将依序询问用户</p>
<p>-r：进行还原模式</p>
<p>-t : 查看模式，看备份文件有哪些文件</p>
</blockquote>
<blockquote>
<p><strong>选项</strong></p>
<p>-f &lt;备份设备&gt;：从指定的文件中读取备份数据，进行还原操作</p>
</blockquote>
</li>
<li><p>应用案例</p>
<ul>
<li><p>restore 命令比较模式，比较备份文件和原文件的区别</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">mv /boot/hello.java /boot/hello100.java</span><br><span class="line">restore -C -f boot.bak1.bz2</span><br><span class="line">mv /boot/hello100.java /boot/hello.java</span><br><span class="line">restore -C -f boot.bak1.bz2</span><br></pre></td></tr></table></figure>
</li>
<li><p>restore 命令查看模式，看备份文件有哪些数据 &#x2F; 文件</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">restore -t -f boot.bak0.bz2</span><br></pre></td></tr></table></figure>
</li>
<li><p>restore 命令还原模式</p>
<blockquote>
<p>如果你有增量备份，需要把增量备份文件也进行恢复， 有几个增量备份文件，就要恢复几个，按顺序来恢复即可</p>
</blockquote>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">mkdir /opt/boottmp</span><br><span class="line">cd /opt/boottmp</span><br><span class="line">restore -r -f /opt/boot.bak0.bz2 // 恢复到第 1 次完全备份状态</span><br><span class="line">restore -r -f /opt/boot.bak1.bz2 // 恢复到第 2 次增量备份状态</span><br></pre></td></tr></table></figure>
</li>
<li><p>restore 命令恢复备份的文件，或者整个目录的文件</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">restore 命令恢复备份的文件，或者整个目录的文件</span><br><span class="line">基本语法： restore -r -f 备份好的文件</span><br><span class="line">测试</span><br><span class="line">[root@hspedu100 opt]# mkdir etctmp</span><br><span class="line">[root@hspedu100 opt]# cd etctmp/</span><br><span class="line">[root@hspedu100 etctmp]# restore -r -f /opt/etc.bak0.bz2</span><br></pre></td></tr></table></figure></li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 id="20-Linux-面试题"><a href="#20-Linux-面试题" class="headerlink" title="20.Linux 面试题"></a>20.Linux 面试题</h3><ol>
<li><p>分析日志 t.log（访问量），将各个 ip 地址截取，并统计出现次数,并按从大到小排序（腾讯）</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">http://192.168.200.10/index1.html</span><br><span class="line">http://192.168.200.10/index2.html</span><br><span class="line">http://192.168.200.20/index1.html</span><br><span class="line">http://192.168.200.30/index1.html</span><br><span class="line">http://192.168.200.40/index1.html</span><br><span class="line">http://192.168.200.30/order.html</span><br><span class="line">http://192.168.200.10/order.html</span><br></pre></td></tr></table></figure>

<p><code>cat t.txt | cut -d &#39;/&#39; -f 3 | sort | uniq -c | sort -nr</code></p>
</li>
<li><p>统计连接到服务器的各个 ip 情况，并按连接数从大到小排序（腾讯）</p>
<p><code>netstat -an | grep ESTABLISHED | awk -F &quot; &quot; &#39;&#123;print $5&#125;&#39; | cut -d &quot;:&quot; -f 1 | sort | uniq -c| sort -nr</code></p>
</li>
<li><p>如忘记了  MySQL 5.7 数据库的 root 用户的密码，如何找回？（滴滴）</p>
<ul>
<li>修改配置文件，跳过输入密码</li>
<li>登入系统后再修改 root 密码</li>
</ul>
</li>
<li><p>写出指令：统计 ip 访问情况，要求分析 nginx 访问日志(access.log)，找出访问页面数量在前 2 位的 ip（美团）</p>
<p><code>cat access.log | awk -F &quot; &quot; &#39;&#123;print $1&#125;&#39; | sort | uniq -c | sort -nr | head -2</code></p>
</li>
<li><p>使用 tcp dump 监听本机，将来自 ip 192.168.200.1，tcp 端口为 22 的数据，保存输出到 tcpdump.log，用做将来数据分析（美团）</p>
<p><code>tcpdump -i ens33 host 192.168.200.1 and port 22 &gt;&gt; /home/tcpdump.log</code></p>
</li>
<li><p>常用的Nginx 模块，用来做什么（头条）</p>
<ul>
<li>rewrite 模块，实现重写功能</li>
<li>access 模块：来源控制</li>
<li>ssl 模块：安全加密</li>
<li>ngx_http_gzip_module 模块：网络传输压缩模块</li>
<li>ngx_http_proxy_module 模块：实现代理</li>
<li>ngx_http_upstream_module 模块：实现定义后端服务器列表</li>
<li>ngx_cache_purge 模块：实现缓存清除功能</li>
</ul>
</li>
<li><p>如果你是系统管理员，在进行 Linux 系统权限划分时，应考虑哪些因素?（腾讯）</p>
<ul>
<li><p>Linux 权限简介</p>
<p><img src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux%E6%9D%83%E9%99%90%E7%AE%80%E4%BB%8B.png" alt="Linux权限简介"></p>
</li>
<li><p>考虑因素</p>
<ul>
<li><p>注意权限分离，比如: 工作中，Linux 系统权限和数据库权限不要在同一个部门</p>
</li>
<li><p>权限最小原则（即:在满足使用的情况下最少优先）</p>
</li>
<li><p>减少使用 root 用户，尽量用普通用户 + sudo 提权进行日常操作</p>
</li>
<li><p>重要的系统文件，比如<code>/etc/passwd</code>、<code>/etc/shadow</code>、<code>etc/fstab</code>、<code>/etc/sudoers</code> 等,日常建议使用 <code>chattr(change attribute)</code> 锁定，需要操作时再打开</p>
<blockquote>
<p>比如锁定 <code>/etc/passwd</code> 让任何用户都不能随意 useradd，除非解除锁定</p>
</blockquote>
</li>
<li><p>使用 SUID, SGID, Sticky 设置特殊权限</p>
</li>
<li><p>可以利用工具，比如 chkrootkit&#x2F;rootkit hunter 检测 rootkit 脚本（rootkit 是入侵者使用工具，在不察觉的建立了入侵系<br>统途径）</p>
</li>
<li><p>利用工具 Tripwire 检测文件系统完整性</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>权限操作思考题</p>
<ul>
<li><p>用户 tom 对目录 &#x2F;home&#x2F;test 有 rwx 权限，<code>/home/test/hello.java</code> 是只读文件，问 tom 对 hello.java 文件</p>
<p>能读吗(ok)    能修改吗(no)    能删除吗(ok)</p>
</li>
<li><p>用户 tom 对目录 &#x2F;home&#x2F;test 只有 rw 权限，<code>/home/test/hello.java</code> 是只读文件，问 tom 对 hello.java 文件</p>
<p>能读吗(no)    能修改吗(no)    能删除吗(no)</p>
</li>
<li><p>用户 tom 对目录 &#x2F;home&#x2F;test 只有 x 权限，<code>/home/test/hello.java</code> 是只读文件，问 tom 对 hello.java 文件</p>
<p>能读吗(ok)    能修改吗(no)    能删除吗(no)</p>
</li>
<li><p>用户 tom 对目录 &#x2F;home&#x2F;test 只有 wx 权限，<code>/home/test/hello.java</code> 是只读文件，问 tom 对 hello.java 文件</p>
<p>能读吗(ok)    能修改吗(no)    能删除吗(ok)</p>
</li>
</ul>
</li>
<li><p>说明 CentOS7 启动流程，并说明和 CentOS6 相同和不同的地方（腾讯）</p>
<ul>
<li><p>CentOS6</p>
<ul>
<li>开机加电自检 — 检查bios中识别的硬件信息是否正常</li>
<li>开机MBR引导 — &#x2F;boot分区引导系统启动的记录信息（MBR引导记录–系统启动文件信息&#x2F;分区表信息）</li>
<li>grup选择菜单 — 可以选择系统内核信息&#x2F;可以选择进入单用户模</li>
<li>加载内核信息 — 用于管理控制硬件</li>
<li>启动系统进程 — &#x2F;sbin&#x2F;init — 后续进程启动（串型—详见图）注：后续进程被第一个进程所管理。查看init下面的服务是第几号开机 是第几号关机</li>
<li><strong>加载启动级别文件 — 加载&#x2F;etc&#x2F;inittab 选择不同级别启动系统</strong></li>
<li>运行初始化脚本 — &#x2F;etc&#x2F;rc.d&#x2F;rc.sysinit 设置主机名称 设置网卡地址信息</li>
<li>执行服务运行脚本 — &#x2F;etc&#x2F;rc.d&#x2F;rc 实现服务开机自动运行</li>
<li>启动mingetty进程 — 显示登录提示信息</li>
</ul>
<blockquote>
<p>开机自检 — 加载MBR — 加载grup菜单 — 加载内核 — 启动第一个服务进程 — 加载运行级别文件 — 加载初始化脚本 — 加载运行脚本（实现服务程序开机自启）— 启动mingetty进程显示登录界面</p>
</blockquote>
</li>
<li><p>CentOS7</p>
<blockquote>
<p>CentOS7 的开机流程大致和6类似 只不过做了些优化的流程</p>
<p>原先 CentOS6 启动第一个流程后是串行的启动后续服务，会比较的慢</p>
<p>CentOS7 则是并行启动相关的服务，速度明显会有提升</p>
</blockquote>
<ul>
<li>开机加电自检 — 检查bios中识别的硬件信息是否正常</li>
<li>开机MBR引导 — &#x2F;boot分区引导系统启动的记录信息（MBR引导记录–系统启动文件信息&#x2F;分区表信息）</li>
<li>grup选择菜单 — 可以选择系统内核信息&#x2F;可以选择进入单用户模式</li>
<li>加载内核信息 — 用于管理控制硬件</li>
<li>启动系统进程 — &#x2F;usr&#x2F;lib&#x2F;systemd&#x2F;systemd — 后续进程启动（并型）</li>
<li><strong>加载启动target文件 — &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;default.target 选择不同级别启动系统</strong></li>
<li><strong>加载系统初始化文件 — &#x2F;usr&#x2F;lib&#x2F;systemd&#x2F;system&#x2F;sysinit.target 设置主机名称 设置网卡地址信息</strong></li>
<li>执行服务运行脚本 — &#x2F;etc&#x2F;systemd&#x2F;system 实现服务开机自动运行</li>
<li><strong>&#x2F;usr&#x2F;lib&#x2F;systemd&#x2F;system&#x2F; 保存系统中所有程序启动文件</strong></li>
<li>启动mingetty进程 — 显示登录提示信息</li>
</ul>
<blockquote>
<p>开机自检 — 加载MBR — 加载grup菜单 — 加载内核 — 启动第一个服务进程 — 加载运行target信息— 加载初始化脚本 — 加载运行文件（实现服务程序开机自启）— 启动mingetty进程显示登录界面</p>
</blockquote>
</li>
</ul>
</li>
<li><p>列举 Linux 高级命令，至少 6 个（百度）</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">netstat 	// 网络状态监控</span><br><span class="line">top 		// 系统运行状态</span><br><span class="line">lsblk 		// 查看硬盘分区</span><br><span class="line">find</span><br><span class="line">ps -aux 	// 查看运行进程</span><br><span class="line">chkconfig 	// 查看服务启动状态</span><br><span class="line">systemctl 	// 管理系统服务器</span><br></pre></td></tr></table></figure>
</li>
<li><p>Linux 查看内存、io 读写、磁盘存储、端口占用、进程查看命令是什么？</p>
<p><code>top, iotop, df -lh , netstat -tunlp , ps -aux | grep 关心的进程</code></p>
</li>
<li><p>使用 Linux 命令计算 t2.txt 第二列的和并输出（美团）</p>
<p><code>cat t2.txt | awk -F &quot; &quot; &#39;&#123;sum+=$2&#125; END &#123;print sum&#125;&#39;</code></p>
</li>
<li><p>Shell 脚本里如何检查一个文件是否存在？并给出提示（百度）</p>
<p><code>if [ -f 文件名] then echo “存在” else echo “不存在” fi</code></p>
</li>
<li><p>用 Shell 写一个脚本，对文本 t3.txt 中无序的一列数字排序, 并将总和输出（百度）</p>
<p><code>sort -nr t3.txt | awk &#39;&#123;sum+=$0; print $0&#125; END &#123;print &quot;和=&quot;sum&#125;</code></p>
</li>
<li><p>请用指令写出查找当前文件夹（&#x2F;home）下所有的文本文件内容中包含有字符 <code>cat</code> 的文件名称（金山）</p>
<p><code>grep -r &quot;cat&quot; /home |cut -d &quot;:&quot; -f 1</code></p>
</li>
<li><p>请写出统计&#x2F;home 目录下所有文件个数和所有文件总行数的指令（在金山面试题扩展）</p>
<p><code>find /home/test -name &quot;*.*&quot; | wc -l</code><br><code>find /home/test -name &quot;*.*&quot; | xargs wc -l</code></p>
</li>
<li><p>列出你了解的web 服务器负载架构（滴滴）</p>
<p>Nginx、Haproxy、Keepalived、LVS</p>
</li>
<li><p>每天晚上10 点30 分，打包站点目录&#x2F;var&#x2F;spool&#x2F;mail 备份到&#x2F;home 目录下（每次备份按时间生成不同的备份包比如按照年月日时分秒）（滴滴）</p>
<ul>
<li>tar 打包</li>
<li>crontab 定时备份</li>
</ul>
</li>
<li><p>如何优化 Linux 系统， 说出你的方法</p>
<ul>
<li>不用root，使用 sudo 提示权限</li>
<li>定时的自动更新服务时间，使用 nptdate npt1.aliyun.com，让 croud 定时更新</li>
<li>配置 yum 源，指向国内镜像</li>
<li>配置合理的防火墙策略，打开必要的端口，关闭不必要的端口</li>
<li>打开最大文件数（调整文件的描述的数量）vim &#x2F;etc&#x2F;profile ulimit -SHn 65535</li>
<li>配置合理的监控策略</li>
<li>配置合理的系统重要文件的备份策略</li>
<li>对安装的软件进行优化，比如 nginx，apache</li>
<li>内核参数进行优化 &#x2F;etc&#x2F;sysctl.conf</li>
<li>锁定一些重要的系统文件 chattr &#x2F;etc&#x2F;passwd &#x2F;ect&#x2F;shadow &#x2F;etc&#x2F;inittab</li>
<li>禁用不必要的服务 setup , ntsysv</li>
</ul>
</li>
</ol>
</article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta">文章作者: </span><span class="post-copyright-info"><a href="https://gitee.com/zcmmmm/zcmmmm">zcm</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta">文章链接: </span><span class="post-copyright-info"><a href="https://gitee.com/zcmmmm/zcmmmm/2022/11/13/Linux%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">https://gitee.com/zcmmmm/zcmmmm/2022/11/13/Linux%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta">版权声明: </span><span class="post-copyright-info">本博客所有文章除特别声明外，均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明来自 <a href="https://gitee.com/zcmmmm/zcmmmm" target="_blank">无人深空</a>！</span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/Linux/">Linux</a></div><div class="post_share"><div class="social-share" data-image="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux.png" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><div class="prev-post pull-left"><a href="/2022/12/05/Hadoop%E9%9D%A2%E7%BB%8F/"><img class="prev-cover" src="https://study-record-images.oss-cn-beijing.aliyuncs.com/BigData/Hadoop/Hadoop.png" onerror="onerror=null;src='/img/404.jpg'" alt="cover of previous post"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">Hadoop 面经</div></div></a></div><div class="next-post pull-right"><a href="/2022/11/10/%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%9E%B6%E6%9E%84/"><img class="next-cover" src="https://study-record-images.oss-cn-beijing.aliyuncs.com/BigDataStructure/BigDataStructure.png" onerror="onerror=null;src='/img/404.jpg'" alt="cover of next post"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">大数据框架</div></div></a></div></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span>相关推荐</span></div><div class="relatedPosts-list"><div><a href="/2022/10/22/Linux%E9%9D%A2%E7%BB%8F/" title="Linux面经"><img class="cover" src="https://study-record-images.oss-cn-beijing.aliyuncs.com/Linux/Linux.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2022-10-22</div><div class="title">Linux面经</div></div></a></div></div></div></div><div class="aside-content" id="aside-content"><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>目录</span><span class="toc-percentage"></span></div><div class="toc-content is-expand"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#Linux-%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86"><span class="toc-text">Linux 基础知识</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-Linux-%E5%BC%80%E5%B1%B1%E7%AF%87-%E5%86%85%E5%AE%B9%E4%BB%8B%E7%BB%8D"><span class="toc-text">1.Linux 开山篇-内容介绍</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-Linux-%E5%9F%BA%E7%A1%80%E7%AF%87-Linux-%E5%85%A5%E9%97%A8"><span class="toc-text">2.Linux 基础篇-Linux 入门</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-Linux-%E5%9F%BA%E7%A1%80%E7%AF%87-VM-%E5%92%8C-Linux-%E5%AE%89%E8%A3%85%EF%BC%88%E7%95%A5%EF%BC%89"><span class="toc-text">3.Linux 基础篇-VM 和 Linux 安装（略）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-Linux-%E5%9F%BA%E7%A1%80%E7%AF%87-%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84"><span class="toc-text">4.Linux 基础篇-目录结构</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#5-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E5%88%B0Linux-%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E7%95%A5%EF%BC%89"><span class="toc-text">5.Linux 实操篇-远程登录到Linux 服务器（略）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#6-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-Vi-%E5%92%8CVim-%E7%BC%96%E8%BE%91%E5%99%A8"><span class="toc-text">6.Linux 实操篇-Vi 和Vim 编辑器</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#7-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E5%BC%80%E6%9C%BA%E3%80%81%E9%87%8D%E5%90%AF%E5%92%8C%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%B3%A8%E9%94%80"><span class="toc-text">7.Linux 实操篇-开机、重启和用户登录注销</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#8-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86"><span class="toc-text">8.Linux 实操篇-用户管理</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#9-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E5%AE%9E%E7%94%A8%E6%8C%87%E4%BB%A4"><span class="toc-text">9.Linux 实操篇-实用指令</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#10-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E7%BB%84%E7%AE%A1%E7%90%86%E5%92%8C%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86"><span class="toc-text">10.Linux 实操篇-组管理和权限管理</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#11-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6"><span class="toc-text">11.Linux 实操篇-定时任务调度</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#12-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-Linux-%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA%E3%80%81%E6%8C%82%E8%BD%BD"><span class="toc-text">12.Linux 实操篇-Linux 磁盘分区、挂载</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#13-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE"><span class="toc-text">13.Linux 实操篇-网络配置</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#14-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86%EF%BC%88%E9%87%8D%E7%82%B9%EF%BC%89"><span class="toc-text">14.Linux 实操篇-进程管理（重点）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#15-Linux-%E5%AE%9E%E6%93%8D%E7%AF%87-RPM-%E4%B8%8E-YUM"><span class="toc-text">15.Linux 实操篇-RPM 与 YUM</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#16-Linux-%E9%AB%98%E7%BA%A7%E7%AF%87-%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86"><span class="toc-text">16.Linux 高级篇-日志管理</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#17-Linux-%E9%AB%98%E7%BA%A7%E7%AF%87-%E5%AE%9A%E5%88%B6-Linux-%E7%B3%BB%E7%BB%9F"><span class="toc-text">17.Linux 高级篇-定制 Linux 系统</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#18-Linux-%E5%86%85%E6%A0%B8%E6%BA%90%E7%A0%81%E8%A7%A3%E8%AF%BB%EF%BC%88%E7%9C%8B%E8%AF%BE%EF%BC%89"><span class="toc-text">18.Linux 内核源码解读（看课）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#19-Linux-%E7%B3%BB%E7%BB%9F-%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D"><span class="toc-text">19.Linux 系统-备份与恢复</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#20-Linux-%E9%9D%A2%E8%AF%95%E9%A2%98"><span class="toc-text">20.Linux 面试题</span></a></li></ol></li></ol></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">&copy;2022 - 2023 By zcm</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span>  数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.min.js"></script><script src="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js"></script><script src="/js/search/local-search.js"></script><div class="js-pjax"></div><script src="/js/categories.js?v1"></script><script src="/js/navigation.js?v1"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>